Warum kann 2D std :: array nicht einfach (mit geschweiften Klammern) initialisiert werden? [Duplikat]
Mögliche Duplikate:
c ++ warum das Verhalten von initializer_list für std :: vector und std :: array unterschiedlich ist
Ich habe ein einfaches 2D-Array (3X2) definiert:
std::array<std::array<int,3>,2> a {
{1,2,3},
{4,5,6}
};
Ich war überrascht, dass diese Initialisierung mit gcc4.5-Fehler nicht funktioniert:too many initializers for 'std::array<std::array<int, 3u>, 2u>'
Warum kann ich diese Syntax nicht verwenden?
Ich fand Problemumgehungen, eine davon sehr lustig mit zusätzlichen Klammern, aber frage mich nur, warum der erste, einfachste Ansatz nicht gültig ist.
Problemumgehungen:
// EXTRA BRACES
std::array<std::array<int,3>,2> a {{
{1,2,3},
{4,5,6}
}};
// EXPLICIT CASTING
std::array<std::array<int,3>,2> a {
std::array<int,3>{1,2,3},
std::array<int,3>{4,5,6}
};
[AKTUALISIEREN]
Ok, dank KerrekSB und Kommentaren verstehe ich den Unterschied. In meinem Beispiel scheint es also zu wenig geschweifte Klammern zu geben, wie in diesem C-Beispiel:
struct B {
int array[3];
};
struct A {
B array[2];
};
B b = {{1,2,3}};
A a = {{
{{1,2,3}},
{{4,5,6}}
}};