如果需要归零数组,用一对大括号初始化std :: array是否正确?

时间:2015-03-18 19:49:23

标签: c++ arrays c++11

我想知道这个结构:

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所说,我在帖子中提出的问题更为笼统。让我们假设我的问题是关于只有琐碎元素的结构。

1 个答案:

答案 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 { {  } };

是等价的。