初始化一个零数组
众所周知,缺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。