我想知道这个结构:
std::array<int, 10> array { };
相当于:
std::array<int, 10> array { { } };
好吧,他们两个都编译了,两者都给出了相同的结果:
for (auto e : array) {
std::cout << e << ", ";
}
输出:
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
我知道要按选定的值初始化std :: array,由于聚合初始化,我必须使用双花括号。但我不知道单支架的表现如何。所以,问题是:
在C ++ 11中用单个花括号初始化struct是完全正确的吗? (这是因为结构的所有字段都将归零)
编辑: 正如@dyp所说,我在帖子中提出的问题更为笼统。让我们假设我的问题是关于只有琐碎元素的结构。
答案 0 :(得分:2)
根据C ++标准(8.5.1聚合)
7如果列表中的initializer-clause数量少于 聚合中的成员,然后每个成员未明确初始化 应从其支撑或等于初始化器初始化,或者如果有的话 从空的初始化列表中不是大括号或大小写的 (8.5.4)。
和(8.5.4列表初始化p。#3)
- 否则,如果初始化列表没有元素,则对象为 值初始化。
因此初始化
std::array<int, 10> array {};
和
std::array<int, 10> array { { } };
是等价的。