嵌套std::array基础类型用{}初始化是否能保证全零?
嵌套std::array的全零初始化问题
结论
可以保证嵌套数组的所有元素都被初始化为0.0。
工作原理
std::array是C++标准定义的聚合类型,当使用空初始化器{}对聚合类型进行初始化时,会触发值初始化规则。- 对于外层的
std::array<std::array<double, N>, M>,它的每个成员都是std::array<double, N>类型的聚合体。空初始化器会递归地对每个内层数组执行值初始化。 - 内层的
std::array<double, N>同样作为聚合体,值初始化会作用于它的每一个double元素;而double类型的值初始化结果就是0.0。 - 哪怕初始化器是空的,C++标准也要求编译器自动补全所有层级成员的初始化,不会留下任何未初始化的元素。
额外说明
如果习惯更显式的写法,std::array<std::array<double, N>, M> my_array = {};和原写法效果完全一致,都是触发值初始化。
内容的提问来源于stack exchange,提问作者Alex Suo
相关产品推荐
相关产品推荐

