【发布时间】:2012-08-28 16:59:49
【问题描述】:
出于某种原因,我认为 C 和 C++ 是这样工作的:
int foo[10] = {57};
for (int i=0; i<10; ++i)
assert (foo[i] == 57);
原来剩余的整数被初始化为 0,而不是 57。我从哪里得到这个想法?这是真的吗?结构初始化列表是否曾经如此?当分配给 = {} 和 = {0} 时,数组和结构何时开始整齐且正确地初始化为 0 值?我一直认为除非另有明确说明,否则它们会初始化为垃圾。
【问题讨论】:
-
如果您不指定任何初始化,它们将被初始化为垃圾(未初始化)。即
int foo[10]; -
旁白:如果您希望他们全部为 57,您可以(在 C++ 中):
int foo[10]; std::fill(begin(foo), end(foo), 57); -
我没有 K&R 1ed 的副本,但是在 K&R 2ed 中,解释了对剩余元素进行零初始化的行为。
-
@JamesMcNellis 我认为剩余的值根本没有在 K&R1 中初始化。 (但我不会发誓——记忆是一件很棘手的事情,而且已经很长时间了)。
标签: c++ c initializer-list