Разница между инициализацией с помощью фигурных скобок и круглых скобок в C++ заключается в том, что первый вариант запрещает «сужающие» преобразования, а второй — разрешает. 13
Инициализация с фигурными скобками (braced initialization) предполагает, что после названия переменной в фигурных скобках указывается её значение. 1 Например: int age {38};
— переменная будет иметь значение 38. 1 Такой способ безопасен, когда применяется сужающее преобразование, так как компилятор не позволяет использовать значение, которое потенциально не может разместиться в инициализируемом объекте. 14
Инициализация с круглыми скобками (функциональная нотация) предполагает, что после названия переменной в круглых скобках указывается её значение. 1 Пример: int age (38);
— переменная будет иметь значение 38. 1
В большинстве случаев все три варианта инициализации эквивалентны. 1 Однако есть ситуации, в которых предпочтительнее использовать один из способов:
С выходом C++20 ожидается, что для агрегатной инициализации можно будет использовать и фигурные, и круглые скобки, при этом фигурные скобки не будут выполнять сужающие преобразования, а круглые — будут. 2