变量零初始化 - 未定义的行为与否

Fro*_*art 2 c c++

可能重复:
这个自我初始化有效吗?

这是一个定义明确的C/C++程序吗?

int foo = foo;

int main()
{

}
Run Code Online (Sandbox Code Playgroud)

foo被初始化为零,或者是不确定的行为?

AnT*_*AnT 11

这是一个不正确的C程序.在C初始化器中,具有静态存储持续时间的对象必须是常量表达式.的foo上右手侧是不是一个常量表达式.

在C++中,它是格式良好的并且已经定义了行为,因为具有静态存储持续时间的对象的零初始化(在任何其他初始化之前发生).

  • @Nikita Trophimov:首先,内置类型的自我分配没有任何问题(为什么会这样?).其次,它不是自我分配,而是自我初始化.自我初始化通常没有意义,但在这个具体的例子中它恰好是无害的. (2认同)