Mediuminitialization
Что такое narrowing conversion и почему brace-init его запрещает?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Narrowing conversion — преобразование с возможной потерей значения/точности: long→int, double→int, long double→double. При = компилятор обычно даёт предупреждение, а при brace-init — обязан выдать ошибку.
double d = 3.14;
int a = d; // OK, возможно предупреждение
int b{d}; // ОШИБКА: narrowing
int c{static_cast<int>(d)}; // OK — явное приведениеЦель — безопасность: компилятор требует явного static_cast, чтобы показать намерение. Это одна из причин использовать brace-init по умолчанию — баги с потерей точности ловятся на этапе компиляции.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.