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 подскажет развёрнутый ответ в реальном времени.