重複の可能性:
c ++ std::vectorとstd::arrayのinitializer_listの動作が異なる理由
単純な2D配列(3X2)を定義しました:
std::array<std::array<int,3>,2> a {
{1,2,3},
{4,5,6}
};
この初期化が機能せず、gcc4.5エラーが発生することに驚きました。too many initializers for 'std::array<std::array<int, 3u>, 2u>'
この構文を使用できないのはなぜですか?
回避策を見つけました。1つは中かっこを追加して非常に面白いものですが、最初の最も簡単なアプローチが有効でないのはなぜでしょうか。
回避策:
// 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}
};
[アップデート]
OK、KerrekSBとコメントのおかげで違いがわかります。したがって、このCの例のように、私の例では中括弧が少なすぎるようです。
struct B {
int array[3];
};
struct A {
B array[2];
};
B b = {{1,2,3}};
A a = {{
{{1,2,3}},
{{4,5,6}}
}};