根据定义,默认初始化是在没有指定其他初始化时发生的初始化;C++ 语言向您保证,您未为其提供显式初始化程序的任何对象都将被默认初始化(C++11 §8.5/11)。这包括类型std::array<T, N>
和的对象T[N]
。
请注意,有些类型的默认初始化无效并且使对象的值不确定:任何非类、非数组类型(第 8.5/6 节)。因此,具有此类类型的对象的默认初始化数组将具有不确定的值,例如:
int plain_int;
int c_style_array[13];
std::array<int, 13> cxx_style_array;
c 风格的数组 和std::array
都填充了不确定值的整数,就像plain_int
具有不确定值一样。
是否有适用于所有数组(包括零大小数组)的语法将所有元素初始化为其默认值?
我猜当你说“到他们的默认值”时,你的意思是“将所有元素初始化为T{}
”。那不是default-initialization,而是value-initialization (8.5/7)。您可以在 C++11 中通过为每个声明提供一个空的初始值设定项来轻松请求值初始化:
int plain_int{};
int c_style_array[13]{};
std::array<int, 13> cxx_style_array{};
这将依次对所有数组元素进行值初始化,从而导致plain_int
和两种数组的所有成员都被初始化为零。