【发布时间】:2018-08-13 09:05:56
【问题描述】:
我有以下代码sn-p:
int i[] = {42, i[0]};
是否允许这样的初始化或导致未定义的行为?
三个主要编译器(gcc、clang、msvc)给我42 for i[1]。因此看起来是合法的,但我希望看到这个案例的标准引用。
【问题讨论】:
-
它在 C 中是合法的。数组成员从头开始初始化。所以你甚至可以:
int i[] = { [1] = func(i[0]), [0] = 5 }; -
在这个论坛上找到了一些技巧。在这种情况下,不需要对数组本身的引用,您也可以使用单个值 42 初始化整个数组,请参阅stackoverflow.com/questions/629017/…
-
@Goodies
you could also initialize the whole array using a single value 42你介意展示一下方法吗? -
阅读我链接的主题。这是有效的 C++ 语法:char array[100] = {42}; (请注意,您必须在声明中指定数组长度。)
-
@Goodies 在这种情况下,所有其余元素都将为零。
标签: c++ language-lawyer array-initialization