Mediumинициализация
Что такое uniform initialization (фигурные скобки) и чем оно лучше старого синтаксиса?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
В C++11 появился универсальный синтаксис `T x{args}` (brace initialization), единый для всех типов. Преимущества: запрещает сужающие преобразования и не позволяет most vexing parse.
int x{3.14}; // ОШИБКА: narrowing запрещён
int y = 3.14; // предупреждение, но компилируется
Widget w{}; // объект, не объявление функции
Widget w(); // most vexing parse — объявление функции!
std::vector<int> v{5, 3}; // {5, 3}, не размер 5 заполненный тройкамиНедостаток: взаимодействие с initializer_list — vector{5,3} создаёт вектор {5,3}, а не размер 5 заполненный тройками (как было бы через vector(5,3)).
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.