Mediumunion

Что такое union и чем отличается от variant?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

`union` — все члены разделяют одну память (активно одно поле). `std::variant` (C++17) — type-safe: знает активный тип, корректно вызывает деструкторы.

// union — небезопасно, читать неактивное поле — UB
union Value {
    int i;
    float f;
};
Value v;
v.i = 42;
std::cout << v.i;   // OK
// std::cout << v.f;  // UB: читаю неактивное поле

// variant — безопасно, знает активный тип
std::variant<int, float> w = 42;
std::cout << std::get<int>(w);   // OK
w = 3.14f;
std::cout << std::get<float>(w);

union — для low-level (SIMD aliasing, type punning). variant — для высокоуровневой логики.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.