Когда внешние скобки могут быть опущены в списке инициализатора?
Я получил ошибку C2078 в VC2010 при компиляции кода ниже.
struct A
{
int foo;
double bar;
};
std::array<A, 2> a1 =
// error C2078: too many initializers
{
{0, 0.1},
{2, 3.4}
};
// OK
std::array<double, 2> a2 = {0.1, 2.3};
Я узнал, что правильный синтаксис дляa1
является
std::array<A, 2> a1 =
{{
{0, 0.1},
{2, 3.4}
}};
Вопрос в том, почему дополнительные скобки требуются дляa1
но не требуется дляa2
?
Update
Вопрос, кажется, не является специфическим для std :: array. Некоторые примеры:
struct B
{
int foo[2];
};
// OK
B meow1 = {1,2};
B bark1 = {{1,2}};
struct C
{
struct
{
int a, b;
} foo;
};
// OK
C meow2 = {1,2};
C bark2 = {{1,2}};
struct D
{
struct
{
int a, b;
} foo[2];
};
D meow3 = {{1,2},{3,4}}; // error C2078: too many initializers
D bark3 = {{{1,2},{3,4}}};
Я до сих пор не понимаю, почемуstruct D
выдает ошибку, но B и C не 'т.