我想知道这个结构是否:
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 指出的那样,我在帖子中的问题更为笼统。假设我的问题是关于仅包含琐碎元素的结构。
根据 C++ 标准(8.5.1 聚合)
\n\n\n\n\n7 如果列表中的初始化子句少于聚合中的成员,则每个未显式初始化的成员应从其大括号或等于初始化器初始化,或者,如果没有大括号-or-equalinitializer,来自空的初始值设定项列表\n (8.5.4)。
\n
和(8.5.4 列表初始化 p.#3)
\n\n\n\n\n\xe2\x80\x94 否则,如果初始值设定项列表没有元素,则对该对象进行值初始化。
\n
因此初始化
\n\nstd::array<int, 10> array {};\nRun Code Online (Sandbox Code Playgroud)\n\n和
\n\nstd::array<int, 10> array { { } };\nRun Code Online (Sandbox Code Playgroud)\n\n是等价的。
\n| 归档时间: |
|
| 查看次数: |
1631 次 |
| 最近记录: |