Jeśli wszystkim członkom danych klas/danych strukturalnych brakuje inicjalizatorów, do skonstruowania obiektu można użyć jednolitej składni inicjalizacji.Dlaczego niestatyczni inicjalizatorzy elementów danych pokonują jednolitą składnię inicjalizacji?
struct foo
{
int i;
float f;
};
...
foo bar{ 5, 3.141f };
Ale jeśli co najmniej jeden członek ma inicjatory, jednolita składnia inicjalizacji staje się nieważna.
struct foo
{
int i;
float f = 0;
};
...
foo bar{ 5, 3.141f }; // Compiler error.
przypuszczam, że dodanie inicjatora zarejestrował dane automatycznie realizuje jeden lub więcej domyślnych konstruktorów i hamuje realizację domyślnego konstruktora initialization_list
. Czy to zamierzony standard? Dlaczego to działa w ten sposób?
Nie ma "domyślnej implementacji konstruktora' initializer_list' ". To, co masz w pierwszym fragmencie, nazywa się * inicjacją agregującą *. – Xeo
Aby uzupełnić komentarz @ Xeo, zobacz * 8.5.1 [dcl.init.aggr] * i * 8.5.4 [dcl.init.list] *. – syam
Ważne: http://stackoverflow.com/questions/4178175/what-are-aggregates-and-pods-andhow-why-are-they-special/7189821#7189821 –