【问题标题】:How to make nested aggregate initializer? [duplicate]如何制作嵌套聚合初始化程序? [复制]
【发布时间】:2017-07-16 13:06:22
【问题描述】:

我的代码如下

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

不知道为什么?

【问题讨论】:

标签: c++ c++11 aggregate-initialization


【解决方案1】:

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

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

但是,如果您想分配给a,您可以随时这样做:

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

【讨论】:

    【解决方案2】:

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

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

    Live Demo

    【讨论】:

      猜你喜欢
      • 2015-04-16
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 2020-03-18
      • 1970-01-01
      相关资源
      最近更新 更多