1

我有如下代码

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}} }; 

不知道为什么?

4

2 回答 2

2

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

如果你想让它工作,你必须将括号初始化列表应用于 的声明a,而不是之后。

但是,如果你想分配给a,你总是可以这样做:

a = decltype(a){{{1,2},{3,4}}}
于 2017-02-25T18:32:41.647 回答
0

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

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

现场演示

于 2017-02-25T18:37:50.813 回答