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

Is it correct to initialize std::array by one pair of curly brackets if zeroed array needed?

本文关键字:数组 初始化 std 是否 对花 如果      更新时间:2023-10-16

我想知道这个构造是否:

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::数组,由于聚合初始化,我必须使用双花括号。但我不知道它在单括号中的表现。所以,问题是:

在C++11中用单花括号初始化结构完全正确吗?(这意味着结构的所有字段都将为零)

编辑:正如@dyp所指出的,我在帖子中的问题更为笼统。让我们假设我的问题是关于只有琐碎元素的结构。

根据C++标准(8.5.1骨料)

7如果列表中的初始值设定项子句少于聚合中的成员,然后每个成员未显式初始化应通过其大括号或相等的初始化器进行初始化,或者,如果存在不是大括号或等号,来自空的初始值设定项列表(8.5.4).

和(8.5.4列表初始化第3页)

--否则,如果初始值设定项列表没有元素,则对象为值已初始化。

因此初始化

std::array<int, 10> array {};

std::array<int, 10> array { {  } };

是等效的。