Dlaczego nie można zainicjować prostego (z nawiasami klamrowymi) 2D std :: array? [duplikować]
Możliwy duplikat:
c ++ dlaczego zachowanie listy inicjalizującej dla std :: vector i std :: array jest różne
Zdefiniowałem prostą tablicę 2D (3X2):
std::array<std::array<int,3>,2> a {
{1,2,3},
{4,5,6}
};
Byłem zaskoczony, że ta inicjalizacja nie działa, z błędem gcc4.5:too many initializers for 'std::array<std::array<int, 3u>, 2u>'
Dlaczego nie mogę użyć tej składni?
Znalazłem obejścia, bardzo zabawne z dodatkowymi nawiasami, ale po prostu zastanawiam się, dlaczego pierwsze, najprostsze podejście nie jest poprawne?
Obejścia:
// 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}
};
[AKTUALIZACJA]
Ok, dzięki KerrekSB i komentarzom dostaję różnicę. Wydaje się więc, że w moim przykładzie jest zbyt mało nawiasów klamrowych, jak w tym przykładzie C:
struct B {
int array[3];
};
struct A {
B array[2];
};
B b = {{1,2,3}};
A a = {{
{{1,2,3}},
{{4,5,6}}
}};