С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
 Аватар для Nequti
247 / 52 / 1
Регистрация: 21.05.2011
Сообщений: 297

Union

05.09.2011, 09:12. Показов 4122. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Человеки привет =) Скажите пожалуйста для чего используются union в С++?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.09.2011, 09:12
Ответы с готовыми решениями:

Union и UB
Можно ли каким-либо образом использовать union как основу для легковесного variant? Насколько я знаю, каст через union в плюсах - UB, но...

Union
Возник вопрос про объединения. В книгах я встречал лишь случай, когда размер одного из полей больше или равен сумме размеров остальных....

union
Реализовать структуру «Машина» (цвет, модель, номер). Номер машины может представлять из себя или пятизначный номер или слово до 8...

10
 Аватар для Enfernuz
22 / 22 / 2
Регистрация: 11.04.2011
Сообщений: 67
05.09.2011, 09:20
Для расположения данных, принадлежащих объединению, в одной области памяти. Это как я понимаю. Возможно, и не совсем верно / совсем неверно

А в целом, довольно много написано в Интернете: на вскидку результат из поисковой системы.

Оттуда можно прочитать, что объединение хранит только один объект из списка его членов, а размер объединения равен размеру самого большого из принадлежащих типов. Поэтому экономится память.
0
 Аватар для Alex1234
13 / 13 / 2
Регистрация: 11.02.2011
Сообщений: 55
05.09.2011, 09:26
Можешь смело его не использовать.
1
 Аватар для Nequti
247 / 52 / 1
Регистрация: 21.05.2011
Сообщений: 297
05.09.2011, 09:29  [ТС]
Enfernuz,я знаю что такое юнион, просто мне хотелось узнать для чего их используют =)
0
 Аватар для Alex1234
13 / 13 / 2
Регистрация: 11.02.2011
Сообщений: 55
05.09.2011, 09:34
Если есть под рукой исходники Qt, посмотри реализацию контейнеров, там встречается union.
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
05.09.2011, 10:01
В каких - то видеоуроках слышал, что используются для переносимости кода.
0
 Аватар для TheAthlete
174 / 170 / 19
Регистрация: 31.08.2010
Сообщений: 575
05.09.2011, 10:17
union - это экономный класс, другими словами класс специального вида. Объединение может иметь несколько переменных-членов, однаков каждый момент времени только одна из них будет содержать значение. Когда значение присваивается одному из членов объединения, все остальные переходят в неопределенное состояние.

Вообще используется для экономии памяти, в основном при разработке игр (в книгах Ламота по DirectX можешь посмотреть), либо внуть реализации каких-либо классов (когда нужна большая скорость)
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
05.09.2011, 10:25
Цитата Сообщение от TheAthlete Посмотреть сообщение
Объединение может иметь несколько переменных-членов, однаков каждый момент времени только одна из них будет содержать значение. Когда значение присваивается одному из членов объединения, все остальные переходят в неопределенное состояние.
Иначе говоря, все члены объединения используют одну и ту же область памяти.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
05.09.2011, 14:33
допустим ты в пакете получаешь данные и при этом знаешь, что можешь получить десять разных типов, тогда обычно делают так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
struct StructPacket
{
 
   union
   {
       int m_int;
       float m_float;
       double m_double;
   };
 
   enum
   { 
       E_INT,
       E_FLOAT,
       E_DOUBLE
   } m_type;
 
};
 
int main()
{
   StructPacket packet;
   packet.m_type = StructPacket::E_FLOAT;
   packet.m_float = 10.5f;
   return 0;
}
тажа реализация всех Variant'ов через union делается

Добавлено через 4 часа 7 минут
C
1
2
3
4
5
6
7
8
9
10
11
typedef union jvalue {
    jboolean z;
    jbyte    b;
    jchar    c;
    jshort   s;
    jint     i;
    jlong    j;
    jfloat   f;
    jdouble  d;
    jobject  l;
} jvalue;
например
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
05.09.2011, 15:35
Цитата Сообщение от Alex1234 Посмотреть сообщение
Можешь смело его не использовать.
Аргументы?
0
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
05.09.2011, 17:20
Цитата Сообщение от fasked Посмотреть сообщение
Иначе говоря, все члены объединения используют одну и ту же область памяти.
Совершенно верно.
Вот пример, получение из двойного слова(DWORD) любой байт.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
typedef union {
  unsigned long color;
  struct {
       unsigned char b, g, r, a;
  };
} argb;
 
 
int main(void) {
  argb col;
  col.color = 0xAABBCCDD;
 
  printf("0x%X", col.a);
  printf("%X", col.r);
  printf("%X",  col.g);
  printf("%X\n", col.b);
 
  getchar();
  return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.09.2011, 17:20
Помогаю со студенческими работами здесь

Union
Здравствуйте! Я уже задавал тут вопрос, как использовать union, и сейчас столкнулся с проблемой: Есть 3 файла и заголовочный файл -...

Union-объеденения
Добрый день. Почему при выводе cout &lt;&lt; &quot;u2 как целое: &quot;; //выводит число 22872? cout &lt;&lt; u2.i &lt;&lt; '\n'; ...

constexpr и union
Добрый день! Подскажите пожалуйста, можно ли использовать constexpr для расчета на этапе компиляции с объединением (union). Мне нужен...

Управляемый value union
Добрый вечер. Пытаюсь создать такую структуру: using namespace std; union actiondata{ char *filename; double delta; }; ...

Union - Объединения
Объясните доходчиво что такое Объединения и для какой работы они нужны. Несколько книг листал а про объединения толком ничего не сказано...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru