初始化一个零数组

众所周知,缺less标量数组的初始化器默认为零。

int A[5]; // Entries remain uninitialized int B[5]= { 0 }; // All entries set to zero 

但是这(下)保证?

 int C[5]= { }; // All entries set to zero 

空括号初始化执行数组的聚合初始化:这会导致int元素的零初始化。

是的,这是有保证的。

是的,根据聚合初始化的规则,它是有保证的(数组C所有元素将被初始化 ,即在这种情况下零初始化为0 )。

(重点是我的)

如果初始化子句的数量小于成员and bases (since C++17)初始化程序列表完全为空 ,则剩余的成员and bases (since C++17) by their default initializers, if provided in the class definition, and otherwise (since C++14) and bases (since C++17)初始化by their default initializers, if provided in the class definition, and otherwise (since C++14)通过空列表,按照通常的列表初始化规则(对非类types和非集合类使用默认构造函数进行值初始化,以及聚合初始化对于聚合)。


PS:

 int A[5]; // Entries remain uninitialized 

“保持未初始化”可能不准确。 对于int A[5]; A所有元素将被默认初始化 。 如果A是静态或线程局部对象,则元素将被初始化为0 ,否则没有任何操作,它们将是不确定的值。

实际上,当你说int A[5] = { 0 }; 你说:初始化第一个元素为零。 所有其他职位由于总体公开化初始化为零。

这一行真正负责让你的数组充满零: int A[5] = { };

这就是为什么如果你使用int A[5] = { 1 }; 你将只有第一个位置inizialized到1。