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_listvector{5,3} создаёт вектор {5,3}, а не размер 5 заполненный тройками (как было бы через vector(5,3)).

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.