gpt4 book ai didi

c++ - 聚合初始化可以引用聚合中的前一个元素吗?

转载 作者:太空狗 更新时间:2023-10-29 20:41:26 26 4
gpt4 key购买 nike

以下是否合法?

class Aggregate {
public:
int a;
int b;
};

class Class {
public:
Class():
m_aggregate{
3,
// Here, m_aggregate.a is fully constructed, but m_aggregate is not
m_aggregate.a + 5
} {
}
Aggregate m_aggregate;
};

在聚合的生命周期开始之后,但在聚合的构造函数作为一个整体完成之前使用聚合元素是否合法?

用 gcc 4.8.2 测试似乎表现正确......

最佳答案

我不认为这是合法的。确实,花括号列表的元素是按顺序初始化的(即列表元素的评估是按顺序进行的,参见 8.5.4/4),但聚合仅在之后列表构造已全面建成。比照。 8.5.1:

When an aggregate is initialized by an initializer list, as specified in 8.5.4, the elements of the initializer list are taken as initializers for the members of the aggregate, in increasing subscript or member order. Each member is copy-initialized from the corresponding initializer-clause.

为了从某物进行复制初始化,原始物首先需要存在。

关于c++ - 聚合初始化可以引用聚合中的前一个元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21354522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com