Единая инициализация, начиная с C++11 (современная эпоха C++), представляет собой практику использования «инициализации фигурных скобок» {}
для инициализации переменной или объекта. Начнем с простого примера. Теперь у нас есть как минимум 5 различных способов инициализировать целочисленную x
переменную 1
:
int x = 1; // Historically the most common way.
int x(1); // Initializer in parentheses.
int x{1}; // Initializer in braces.
int x = {1}; // Using both braces and '=', treated the same as "int x{1};".
auto x{1}; // Type of x deduced to int (since C++17).
Вот ещё примеры:
int x{ 42 };
int *px{ &x };
int &rx{ x };
int (*pf)(int){ nullptr };
bool flag{ true };
int a[]{ 1, 2, 3, 4 };
std::string s{ "meow" };
std::string u{ "12345", 3 }; // "123"
Почему бы просто не использовать классику int x = 1;
и не положить конец? Подробнее про универсальную инициализацию (включая некоторые «подводные камни») можно почитать у Скотта Мейерса (Meyers).