根据定义,默认初始化是未指定其他初始化时发生的初始化。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样式数组和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_old_int
和两种数组的所有成员都初始化为零。
T x[N]
语法等效。