可以汇总初始化是指汇总中的先前元素
Can aggregate initialization refer to a previous element in the aggregate?
是以下合法吗?
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:
当通过8.5.4中指定的初始化列表初始化汇总时,初始化器列表的元素被作为汇总成员的初始化元素,以增加的下标或成员顺序。每个成员都是从相应的初始化器子句中复制的。
为了从某种事物中复制启动,原始需要首先存在。
相关文章:
- 用向量的向量元素初始化向量的空向量
- 使用 new 和 值进行数组初始化,但没有显式数量的元素
- C++:带有大括号初始化列表的函数调用表达式 - 标准是否规定在单个元素列表的微不足道的情况下忽略大括号?
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- 我可以列表初始化 std::vector 并完美转发元素吗?
- 如何初始化由unique_ptr管理的数组的元素?
- 如何在构造函数初始值设定项列表中使用 n 个元素初始化 std::vector<std::time_t>
- 使用宏使用额外元素初始化数组
- 为什么数组的 GCC 聚合初始化首先用零填充整个事物,包括非零元素?
- 在 new 关键字中,由默认构造函数初始化的类中的元素是否也使用 new 关键字在C++?
- 用空向量 c++ 的 M 元素初始化向量
- 如何用NaN元素初始化双矩阵?
- 将向量元素与字符串元素进行比较,而不初始化向量
- 使用声明中的元素类型隐式初始化 std::array
- 如何使用初始化列表循环修改元素
- 在 c++ 中使用未知元素初始化的字符数组
- 如何使用给定数量的元素初始化boost::python::list
- 如何使用两点和步骤 c++ 之间的元素初始化向量
- 使用 const 数组元素初始化
- 使用硬编码元素初始化 std::vector 的最简单方法是什么<MyClass>?