Пространства имён
Варианты
Действия

Union declaration

Материал из cppreference.com
< cpp‎ | language

 
 
Язык С++
Общие темы
Управление программой
Операторы условного выполнения
Операторы повторения
Операторы перехода
Функции
объявление функции
объявление лямбда-функции
шаблон функции
спецификатор inline
спецификаторы исключений (устарело)
спецификатор noexcept (C++11)
Исключения
Пространства имён
объявление пространства имён
псевдонимы пространства имён
Типы
типы-объединения
функциональные типы
спецификатор decltype (C++11)
Спецификаторы
cv-спецификаторы
спецификаторы продолжительности хранения
спецификатор constexpr (C++11)
спецификатор auto (C++11)
спецификатор alignas (C++11)
Инициализация
Литералы
Выражения
Утилиты
Типы
typedef-объявление
объявление псевдонима типа (C++11)
атрибуты (C++11)
Приведения типов
неявные преобразования
const_cast-преобразование
static_cast-преобразование
dynamic_cast-преобразование
reinterpret_cast-преобразование
C-подобное и функциональное приведение типов
Выделение памяти
Классы
Особые свойства классовых функций
Специальные функции-члены
Шаблоны
шаблон класса
шаблон функции
специализация шаблона
упакованные параметры (C++11)
Разное
Ассемблерные вставки
 
Союз представляет собой особый тип класса, который хранит все свои данные-члены в том же месте памяти.
Оригинал:
A union is a special class type that stores all of its data members in the same memory location.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Профсоюзы не могут иметь виртуальные функции, быть унаследованы или наследовать другие классы.
Оригинал:
Unions cannot have virtual functions, be inherited or inherit other classes.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
(до C++11) Союзов может содержать только POD (Plain Old Data) типа.
Оригинал:
(до C++11) Unions can only contain POD (Plain Old Data) types.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
(начиная с C++11) Если объединение содержит не-POD члена, который имеет определенный пользователем специальной функции (конструктор, деструктор, конструктор копирования или копирования назначения) эта функция будет удален по умолчанию в профсоюз и должен быть определен явно пользователем.
Оригинал:
(начиная с C++11) If a union contains a non-POD member, which has a user-defined special function (constructor, destructor, copy constructor or copy assignment) that function is deleted by default in the union and needs to be defined explicitly by the user.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

Содержание

[править] Синтаксис

union name { member_declarations } object_list (необязательно) ; (1)
union { member_declarations } ; (2)

[править] Объяснение

# С именем союза
Оригинал:
#Named union
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
# Anonymous союза
Оригинал:
#Anonymous union
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Аноним союзов

Члены анонимного объединения доступны из внешней области видимости, как одиночных переменных.
Оригинал:
Members of an anonymous union are accessible from the enclosing scope as single variables.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Аноним союзы имеют дополнительные ограничения: они должны иметь только члены общественных и не может иметь функции-члены.
Оригинал:
Anonymous unions have further restrictions: they must have only public members and cannot have member functions.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Пространство имен-сферы анонимные профсоюзы должны быть статическими.
Оригинал:
Namespace-scope anonymous unions must be static.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

[править] Пример

union foo
{
  int x;
  signed char y;
};
 
int main()
{
  foo.x = 128 + 896;
  std::cout << "as int: "  << (int)foo.x << '\n';
  std::cout << "as char: " << (int)foo.y << '\n';
  return 0;
}

Вывод:

as int: 1024
as char: 128
(Для прямой порядок байтов процессоров)
Оригинал:
(for little-endian processors)
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.