我的代码如下
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}} };
不知道为什么?
答案 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}};