Является ли тип наказания в C ++ 20 через профсоюзы сейчас законным для интегральных типов?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Является ли тип наказания в C ++ 20 через профсоюзы сейчас законным для интегральных типов?

Сообщение Anonymous »

Есть много онлайн -сообщений о старых версиях C ++, не допускающего наказание типа через профсоюзы. Я спросил ChatGTP, изменилось ли это в недавних версиях, и он говорит, что C ++ 20 ослабил это ограничение и, таким образом, позволил каким -либо типам наказания. В частности, для «тривиально копируемых» типов. CHATGTP говорит: < /p>

Соответствующая нормативная формулировка: < /p>
° Class.union.general] (C ++ 20 §11.5.1 /6 В черновике N4868: < /p>
, если союз стандартного содержимого. из них. Читает представление объекта того же размера, что и письменное член. />®class.copy] (C ++ 20 §11.4 /4) определяет тривиально копируемые типы, и это связано с тем, почему тип
Punning Wise Unions работает для них. < /p>
Итак, Safe и стандартный тип профсоюзов: < /p>
, если союз. is permitted, as long as you’re accessing the common initial sequence or
treating the read as accessing the object representation (bit-level copy).

I looked in section 11.5.1 of the C++20 standard (1), it says:

[Note 1 : One special guarantee is made in order Чтобы упростить использование профсоюзов: если союз A
Standard-Layout содержит несколько стандартных структур, которые имеют общую начальную последовательность
(11.4), и если активен нестатический элемент данных объекта этого стандартного типа
и является одним из стандартных структурных структур; Смотрите 11.4. - End Note] < /p>
< /blockquote>
Эта примечание не подтверждает ее для меня, потому что она говорит о структурах в профсоюзах.
Я не стандартный адвокат C ++, так же как и следующее, теперь законно в C ++ 20+: < /p>
enum A : u32 { ... }
enum B : u32 { ... }

union U {
uint32_t i;
A a;
B b;
};

U u;
u.i = 42;
std::cout

Подробнее здесь: https://stackoverflow.com/questions/797 ... gral-types
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»