HardUBlow-level
Что такое type punning и почему reinterpret_cast для этого опасен?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Type punning — переинтерпретация одних и тех же битов как другого типа (например, float как int). Прямое *reinterpret_cast<int*>(&f) нарушает strict aliasing rule — UB.
float f = 3.14f;
// ОПАСНО: нарушает strict aliasing — UB
// int i = *reinterpret_cast<int*>(&f);
// БЕЗОПАСНО: memcpy (компилятор оптимизирует тривиально-копируемые)
int i;
std::memcpy(&i, &f, sizeof(i));
// C++20: constexpr, безопасно
int j = std::bit_cast<int>(f);bit_cast требует одинакового размера и trivially copyable типов — это правильный современный путь.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.