reinterpret_cast) to a pointer to its first non-static data member and vice versa.
https://en.cppreference.com/w/cpp/types/is_standard_layout
В стандарте написано так:
http://eel.is/c++draft/intro.object#9
Однако если конвертировать можно, то правила strict aliasing'а довольно однозначно высказываются по поводу разыменования такого указателя. И всё же кажется логичным, что его можно разыменовать, но подтверждения этому я пока в стандарте не нашёл. Вопрос: это так или зачем подобное разрешено?
@Endill Возможно, вы знаете?
struct S {int a}; S s; *reinterpret_cast<int*>(&s); // 1 *reinterpret_cast<S*>(&s.a); // 2 1 и 2 это lvalue, которые относятся к разным объектам (подобъекту a и объекту s соответственно), поэтому никаких проблем со strict aliasing нет. class.mem#general-27 гарантирует, что они находятся по одному адресу
Что-то мне кажется, что ты неправ... "Ты конечно вор авторитетный, но..."
Я бы в любом случае не стал бы так кастовать... Во-первых, НЕ ЗАЧЕМ, а во-вторых, - не зачем.
Это просто из интереса, я тоже не знаю зачем
если есть еще соображения, я внимательно слушаю
Обсуждают сегодня