Форум программистов, компьютерный форум CyberForum.ru

Union что из себя представляет? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 145, средняя оценка - 4.79
VintProg
 Аватар для VintProg
7 / 7 / 0
Регистрация: 24.06.2009
Сообщений: 44
27.08.2010, 11:33     Union что из себя представляет? #1
Читал много книг и там про него не чего не было сказано, парни объясните мне пожалуйста для чего он?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2010, 11:33     Union что из себя представляет?
Посмотрите здесь:

Union C++
Union C++
Union с явными указателями или void*- что выбрать? C++
Union C++
Что из себя представляет допустим поток ввода/вывода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,862
Записей в блоге: 2
Завершенные тесты: 1
22.06.2016, 15:44     Union что из себя представляет? #41
Цитата Сообщение от Evg Посмотреть сообщение
В ней правда не хватает одного полезного совета. При использовании gcc в более-менее сложном проекте опция -fno-strict-aliasing помогает избавиться от головной боли
Там написано, что это детский сад:
Детсадовский метод, это отключить проклятый strict aliasing совсем ключиком -fno-strict-aliasing.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2658 / 1669 / 156
Регистрация: 13.01.2012
Сообщений: 6,214
22.06.2016, 15:50     Union что из себя представляет? #42
Цитата Сообщение от Croessmah Посмотреть сообщение
детский сад
а почему?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11815 / 6794 / 769
Регистрация: 27.09.2012
Сообщений: 16,862
Записей в блоге: 2
Завершенные тесты: 1
22.06.2016, 15:53     Union что из себя представляет? #43
Цитата Сообщение от vxg Посмотреть сообщение
а почему?
Наверное, потому что легко и
Цитата Сообщение от Evg Посмотреть сообщение
ценой небольшой потери производительности
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6162 / 2891 / 282
Регистрация: 04.12.2011
Сообщений: 7,691
Записей в блоге: 3
22.06.2016, 15:58     Union что из себя представляет? #44
Цитата Сообщение от Croessmah Посмотреть сообщение
Там написано
Там есть места такие, что зачитаешься:
Почувствуй себя компилятором, подумай мальца за него: не бежит ли лиса, не летит ли орел, не ломается ли алиасинг.
А о компиляторах и ключах компиляции:
6.1. Компиляторы врут, ворнинги ненадежны, -Wall иногда работает (надо включать!), но гарантий не дает.
Ну то есть : "А буде кто с ключом к нам придёт, - от ключа и погибнет."
Оптимистическая трагедия. Я то считал, что объект это не только участок памяти специальным образом размеченный, а это и способ интерпретации участка памяти, который не сном ни духом о том не ведает. Ан-нет. Компилятор в борьбе за скорость продаст и не крякнет. Остаётся, как сказано в статье - пост, молитва и низко калорийная диета с обилием песнопений и полиненасыщенных жирных кислот.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
22.06.2016, 16:08     Union что из себя представляет? #45
Тут в общем-то дело не в компиляторе, а в языке. В погоне за производительностью в стандарте осталось слишком много всяких UB. Поэтому программируя на Си или Си++ людям приходится так или иначе понимать много разных тонкостей, включая особенности работы компилятора
DrOffset
6423 / 3797 / 878
Регистрация: 30.01.2014
Сообщений: 6,586
22.06.2016, 16:30     Union что из себя представляет? #46
Цитата Сообщение от vxg Посмотреть сообщение
а почему?
Я думаю это продиктовано тем, что если разработчик вместо того, чтобы попытаться решить проблему грамотно, сразу подсовывает костыли, то он еще незрелый разработчик, разработчик-ребенок.
vxg
Модератор
 Аватар для vxg
2658 / 1669 / 156
Регистрация: 13.01.2012
Сообщений: 6,214
22.06.2016, 16:43     Union что из себя представляет? #47
DrOffset, хорошо что я сижу там где нет всей этой зауми
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
22.06.2016, 18:53     Union что из себя представляет? #48
что то я не пойму, зачем Union тогда нужен вообще, если запись в одно поле, а затем чтение из другого - это UB.

как поступить тогда тут? если мне нужно взять например rgba[0] от col
C++
1
2
3
4
5
union Color
{
unsigned long col;
unsigned char rgba[4];
}
vxg
Модератор
 Аватар для vxg
2658 / 1669 / 156
Регистрация: 13.01.2012
Сообщений: 6,214
22.06.2016, 19:13     Union что из себя представляет? #49
Raali, вроде как если делать транзит через промежуточную переменную убердерьмо не случится
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6162 / 2891 / 282
Регистрация: 04.12.2011
Сообщений: 7,691
Записей в блоге: 3
22.06.2016, 20:21     Union что из себя представляет? #50
Цитата Сообщение от Raali Посмотреть сообщение
зачем Union тогда нужен вообще
Для экономии памяти.
Можно хранить тот или иной объект. Но в текущий момент или тот или иной.

Компилятор + AI = страшная сила:
***
"Пускай детишки закричат во снах,
В которые ворвётся этот страх:
Strict aliasing'а ужасный вид,
Кровь компилятора оледенит..."
castaway
Эксперт С++
4841 / 2980 / 367
Регистрация: 10.11.2010
Сообщений: 11,012
Записей в блоге: 10
Завершенные тесты: 1
22.06.2016, 20:37     Union что из себя представляет? #51
Цитата Сообщение от IGPIGP Посмотреть сообщение
Там выше я давал ссылку на обсуждение strict alliasing при наличии двух разнотипных указателей на один и тот же объект участок памяти. Там приводится пример из хабра:
https://habrahabr.ru/post/114117/
Это уже не актуально с GCC 5.3.0.
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6162 / 2891 / 282
Регистрация: 04.12.2011
Сообщений: 7,691
Записей в блоге: 3
22.06.2016, 21:30     Union что из себя представляет? #52
Цитата Сообщение от castaway Посмотреть сообщение
Это уже не актуально с GCC 5.3.0.
castaway, как я понял тема о UB, стандарте и strict aliasing rules. Стандарт определяет условия и гарантии компиляторов. И это достаточно принципиальный вопрос безотносительно конкретного компилятора.
Как тут уже неоднократно и разнообразно прозвучало, данное UB не проявляется на большинстве актуальных компиляторов. И данное UB - нежелательная вещь как потенциально возможное явление в будущих версиях компиляторов и при портировании, например. То есть актуальность или неактуальность для конкретной реализации - полезная инфа, но принципиального значения не имеет. Сама констатация разрушительности ураганной силы применяемых оптимизаций, это достаточно пикантный факт. Факт есть факт и это надо принять.
А выводы - вопрос конкретного разработчика в конкретных условиях.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2016, 17:09     Union что из себя представляет?
Еще ссылки по теме:

C++ Что из себя представляют типы данных?
Что из себя представляет код в стеке, и как его использовать C++
STL Вектор Копирование элемнтов себя из себя C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 319
Регистрация: 30.03.2009
Сообщений: 14,121
Записей в блоге: 26
24.06.2016, 17:09     Union что из себя представляет? #53
Цитата Сообщение от Raali Посмотреть сообщение
что то я не пойму, зачем Union тогда нужен вообще, если запись в одно поле, а затем чтение из другого - это UB
Для того, чтобы писать в поле 1, потом читать из поля 1, затем писать в поле 2, потом читать из поля 2 и т.п. Думается, именно такой смысл в union вкладывали отцы-основатели. А жизненные потребности оказались шире
Yandex
Объявления
24.06.2016, 17:09     Union что из себя представляет?
Ответ Создать тему
Опции темы

Текущее время: 14:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru