如何制作嵌套聚合初始值设定项?

时间:2017-02-25 18:30:21

标签: 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 = {{1,2},{3,4}}工作?

找工作方式

a = { {{1,2},{3,4}} }; 

不知道为什么?

2 个答案:

答案 0 :(得分:2)

聚合初始化是初始化a已通过默认初始化初始化。你不能再次初始化它(好吧,你可以,但是我们不要深入了解它。)

如果您希望这样做,您必须将braced-init-list应用于a的声明,而不是之后。

但是,如果您要分配到a,则可以随时执行此操作:

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

答案 1 :(得分:0)

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

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

Live Demo