C++ 如何创建嵌套聚合初始值设定项?

C++ 如何创建嵌套聚合初始值设定项?,c++,c++11,aggregate-initialization,C++,C++11,Aggregate Initialization,我有如下代码 struct A {int i; int j;} int main() { array<A, 2> a; a = {{1,2},{3,4}}; //compilation error: not take a right-hand operand of //type 'initializer list' (or no acceptable conversion) } 不知道为什么?聚合初始化就是初始化a已

我有如下代码

struct A {int i; int j;}

int main()
{
    array<A, 2> a;
    a = {{1,2},{3,4}}; //compilation error: not take a right-hand operand of 
                       //type 'initializer list' (or no acceptable conversion)
}

不知道为什么?

聚合初始化就是初始化<代码>a已通过默认初始化进行初始化。您不能再次初始化它(当然,您可以,但我们不要进入深层魔法)

如果您希望这样做,则必须将带括号的init列表应用于
a
的声明,而不是之后

但是,如果要分配给
a
,则始终可以执行以下操作:

a = decltype(a){{{1,2},{3,4}}}

聚合初始化就是初始化<代码>a已通过默认初始化进行初始化。您不能再次初始化它(当然,您可以,但我们不要进入深层魔法)

如果您希望这样做,则必须将带括号的init列表应用于
a
的声明,而不是之后

但是,如果要分配给
a
,则始终可以执行以下操作:

a = decltype(a){{{1,2},{3,4}}}

如前所述,您不是在初始化,而是在分配,因此聚合初始化在这里不起作用。但是,如果您能为编译器提供一些帮助,这可能会起作用:

std::array<A, 2> a;
a = {A{1,2}, A{3,4}};

std::array

如前所述,您不是在初始化,而是在分配,因此聚合初始化在这里不起作用。但是,如果您能为编译器提供一些帮助,这可能会起作用:

std::array<A, 2> a;
a = {A{1,2}, A{3,4}};

std::array

这是赋值,不是初始化。@Neil Butterworth:True,但形式上,
{}
初始化器将用于初始化临时RHS对象,然后将其传递给
=
操作符。另请参见:@AnT这很好地回答了我的问题。谢谢这是赋值,不是初始化。@Neil Butterworth:是的,但在形式上,
{}
初始化器将用于初始化临时RHS对象,然后将其传递给
=
操作符。另请参见:@AnT这很好地回答了我的问题。谢谢