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

sen*_*fen 5 c++ arrays c++11

我想知道这个结构是否:

std::array<int, 10> array { };
Run Code Online (Sandbox Code Playgroud)

等价于:

std::array<int, 10> array { {  } };
Run Code Online (Sandbox Code Playgroud)

好吧,它们都编译并且给出相同的结果:

for (auto e : array) {
        std::cout << e << ", ";
}
Run Code Online (Sandbox Code Playgroud)

出去:

0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
Run Code Online (Sandbox Code Playgroud)

我知道要通过选定的值初始化 std::array 我必须使用双大括号,因为聚合初始化。但我不知道单括号的表现如何。所以,问题是:

在 C++11 中通过单花括号初始化结构体完全正确吗?(接下来结构体的所有字段都将被清零)

编辑:正如@dyp 指出的那样,我在帖子中的问题更为笼统。假设我的问题是关于仅包含琐碎元素的结构。

Vla*_*cow 3

根据 C++ 标准(8.5.1 聚合)

\n\n
\n

7 如果列表中的初始化子句少于聚合中的成员,则每个未显式初始化的成员应从其大括号或等于初始化器初始化,或者,如果没有大括号-or-equalinitializer,来自空的初始值设定项列表\n (8.5.4)。

\n
\n\n

和(8.5.4 列表初始化 p.#3)

\n\n
\n

\xe2\x80\x94 否则,如果初始值设定项列表没有元素,则对该对象进行值初始化。

\n
\n\n

因此初始化

\n\n
std::array<int, 10> array {};\n
Run Code Online (Sandbox Code Playgroud)\n\n

\n\n
std::array<int, 10> array { {  } };\n
Run Code Online (Sandbox Code Playgroud)\n\n

是等价的。

\n