Mediumприведение типов
Чем отличается static_cast от C-style cast (T)x?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
`static_cast<T>(x)` — явно, проверяемое компилятором приведение: между числовыми типами, указателями по иерархии, void* в T*. C-style cast (T)x комбинирует static_cast, const_cast и reinterpret_cast в зависимости от контекста — «молчаливый» и опасный.
double d = 3.14;
int i = static_cast<int>(d); // явно, проверяемо
int j = (int)d; // C-style — работает, но что он делает?
const int* cp = &i;
// int* p = static_cast<int*>(cp); // ОШИБКА — нужен const_cast
int* p = (int*)cp; // C-style молча снимает const — опасноИменованные касты (static_cast, const_cast, dynamic_cast, reinterpret_cast) предпочтительны — greppable, явные, компилятор проверяет совместимость.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.