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