Что такое ключевое слово union в C++?

«Что такое ключевое слово union в C++?» — вопрос из категории C++ Core, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

union — это составной тип данных в C++, все члены которого разделяют одну и ту же область памяти. Размер union равен размеру его наибольшего члена. В один момент времени union может содержать значение только одного из своих членов.

Основное применение: экономия памяти и низкоуровневая работа с данными (например, представление одних и тех же байтов разными типами).

#include <iostream>

union DataPacket {
    int32_t asInt;
    float asFloat;
    uint8_t asBytes[4];
};

int main() {
    DataPacket packet;
    packet.asFloat = 3.14159f;

    // Интерпретируем те же байты как целое число
    std::cout << "Float value: " << packet.asFloat << std::endl;
    std::cout << "Same bits as integer: 0x" << std::hex << packet.asInt << std::endl;

    // Доступ к отдельным байтам
    std::cout << "Bytes: ";
    for (int i = 0; i < 4; ++i) {
        std::cout << static_cast<int>(packet.asBytes[i]) << ' ';
    }
    std::cout << std::endl;

    return 0;
}

Важные замечания:

  • Активен только один член union. Чтение неактивного члена — это неопределенное поведение (UB).
  • В современном C++ (C++11 и выше) рекомендуется использовать объединения с вариантом (variant unions), где можно явно отслеживать активный член, или стандартный класс std::variant.
  • Часто используется в системном программировании, для работы с регистрами оборудования или разбора сетевых пакетов.