может кто-нибудь объяснить фрагмент кода о приведении в http://en.cppreference.com/w/cpp/types/aligned_storage пожалуйста?
можно следующий код
return *static_cast<const T*>(static_cast<const void*>(&data[pos]));
заменить на
return *reinterpret_cast<const T*>(&data[pos]);
?
Почему здесь используются два литья? Большое спасибо.
Хонг
reinterpret_cast
не указан в стандарте. На практике они, вероятно, делают одно и то же во всех или почти во всех реализациях. - person Steve Jessop   schedule 10.10.2013reinterpret_cast
недостаточно указано для задания, а во-вторых, это причина, по которой в примере кода используются эти два приведения). Это немного плохой показатель, еслиstd::aligned_storage
действительно дает вам что-то, что в двух шагах от того, чтобы его можно было использовать. - person Steve Jessop   schedule 10.10.2013reinterpret_cast
в этом примере cppreference, но затем изменил эту цепочкуstatic_cast
с комментарием «избегайте формального UB» после прочтения обсуждения Lounge, начиная с chat.stackoverflow.com/transcript/message/10437436#10437436 и пост TR1-age stackoverflow.com /a/1082398/273767 .. но, возможно, я был слишком осторожен. Не стесняйтесь вернуться, если кто-то опубликует убедительный ответ. - person Cubbi   schedule 10.10.2013