首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何制作嵌套聚合初始化器?

如何制作嵌套聚合初始化器?
EN

Stack Overflow用户
提问于 2017-02-26 02:30:21
回答 2查看 294关注 0票数 1

我有如下代码

代码语言:javascript
复制
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}}工作?

寻找工作之路

代码语言:javascript
复制
a = { {{1,2},{3,4}} }; 

不知道为什么?

EN

回答 2

Stack Overflow用户

发布于 2017-02-26 02:32:42

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

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

然而,如果你想赋值给a,你总是可以这样做:

代码语言:javascript
复制
a = decltype(a){{{1,2},{3,4}}}
票数 2
EN

Stack Overflow用户

发布于 2017-02-26 02:37:51

如前所述,您不是在初始化,而是在赋值,因此聚合初始化在这里不起作用。但是,如果您能给编译器一点帮助,这是可以工作的:

代码语言:javascript
复制
std::array<A, 2> a;
a = {A{1,2}, A{3,4}};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42459995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档