Описание тега uniform-initialization
В C++03 есть несколько способов инициализировать переменную, в том числе:
int i; // uninitialized
int i = int();
int i = 0;
int i = { 0 };
int i(0);
int i(); // declares a function not a variable
int i[] = { 0 };
Эти разные формы инициализации могут иметь разные эффекты в разных контекстах, например, некоторые формы недопустимы для типов классов с explicit
конструкторы и другие формы недопустимы для агрегатных типов и в других случаях имеют неожиданную семантику (см. most-vexing-parse). Это приводит к путанице и ошибкам программирования.
В C++11 представлен новый унифицированный синтаксис инициализации с использованием фигурных скобок, который можно использовать вместо различных форм, показанных выше, и действителен для типов классов с конструкторами, объявленными пользователем, а также для агрегатов и фундаментальных типов. В сочетании с новым типом библиотеки,std::initializer_list
(см. список-инициализаторов), новый синтаксис также позволяет инициализировать такие типы, как контейнеры, списком значений, которые будут использоваться для заполнения контейнера.
Дополнительные сведения см. В разделах Унифицированный синтаксис и семантика инициализации в FAQ Бьярна Страуструпа по C++11 и Унифицированная инициализация в статье Википедии о C++11.
Связанные теги: list-initialization