Есть одна разница в том, что A1
и A3
- aggregate type, а A2
- нет, поскольку он имеет определяемый пользователем конструктор.
тип класса (как правило, структура или объединение), который имеет
- ...
- нет пользователя при условии
, inherited, or explicit (since C++17)
Конструкторов (explicitly defaulted or deleted constructors are allowed) (since C++11)
- ...
Это означает для A1
и A3
они coul d быть объединенным, а A2
не может.
A1 a1{99}; // fine; n is initialized to 99
A3 a3{99}; // fine; n is initialized to 99
A2 a2{99}; // error; no matching constructor taking int found
Будет ли компилятор не нулевой инициализации a1.n
, a2.n
, a3.n
в соответствии со стандартом C++?
В соответствии с правилом default initialization, если они имеют продолжительность автоматического хранения, здесь нет нулевой инициализации, все значения будут неопределенными. С другой стороны, статические и поточно-локальные объекты получают zero initialized.
Не уверен, что вы подразумеваете под этим .. они не равны, например, первая - это совокупность, а вторая - –