Есть много онлайн -сообщений о старых версиях C ++, не допускающего наказание типа через профсоюзы. Я спросил CHATGPT, изменилось ли это в последних версиях, и он говорит, что C ++ 20 ослабил это ограничение и, таким образом, позволил каким -либо типам наказания. В частности, для «тривиально копируемых» типов. CHATGPT говорит: < /p>
Соответствующая нормативная формулировка: < /p>
class.Union.General] (C ++ 20 §11.5.1 /6 В черновике n4868: < /p>
, инициализируя, инициализированные, инициализированные, инициализированные союз, инициализированные, инициализированные, инициализированные, инициализированные, инициализированные члены. любой из них. < /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
Является ли тип наказания в C ++ 20 через профсоюзы сейчас законным для интегральных типов? ⇐ C++
Программы на C++. Форум разработчиков
1757575251
Anonymous
Есть много онлайн -сообщений о старых версиях C ++, не допускающего наказание типа через профсоюзы. Я спросил CHATGPT, изменилось ли это в последних версиях, и он говорит, что C ++ 20 ослабил это ограничение и, таким образом, позволил каким -либо типам наказания. В частности, для «тривиально копируемых» типов. CHATGPT говорит: < /p>
Соответствующая нормативная формулировка: < /p>
class.Union.General] (C ++ 20 §11.5.1 /6 В черновике n4868: < /p>
, инициализируя, инициализированные, инициализированные, инициализированные союз, инициализированные, инициализированные, инициализированные, инициализированные, инициализированные члены. любой из них. < /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
Подробнее здесь: [url]https://stackoverflow.com/questions/79761341/is-type-punning-in-c20-via-unions-now-legal-for-integral-types[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия