Возможно, интересно отметить, помимо того, что говорили другие, что есть разница между следующими двумя строками:
A a;
A a{}; // Using uniform initialization from C++11 to avoid the ambiguity
А также между следующими двумя строками:
A* a = new A;
A* a = new A(); // or new A{}
В первой строке каждого примера объект инициализируется по умолчанию.Во вторых строках объект инициализируется значением.Разница в том, что хотя default-initialization будет вызывать конструктор по умолчанию для A, value-initialization будет сначала инициализировать объект с нуля, а затем вызывать конструктор по умолчанию (если нет пользовательских конструкторов).все, что не является типом класса, инициализация по умолчанию не будет выполнять инициализацию.Для всего, что не является типом класса или объединением без предоставленного пользователем конструктора, инициализация значения инициализирует ноль объекта.