此代码是否会产生未定义的行为,或者它只是未指定的行为?

Ara*_*raK 6 c++ primitive-types undefined-behavior static-order-fiasco unspecified-behavior

可以说我们有两个编译单元如下:

// a.cpp
extern int value2;
int value1 = value2 + 10;

// b.cpp
extern int value1;
int value2 = value1 + 10;
Run Code Online (Sandbox Code Playgroud)

当我在VC2010上尝试它时,它首先初始化value1value2归零.不能全是value1value2动态初始化,并默认初始化不会对他们适用?

谢谢,

Ste*_*sop 8

3.6.2/1表示"在进行任何其他初始化之前,具有静态存储持续时间(3.7.1)的对象应进行零初始化(8.5)".

所以你是对的,它们不是默认初始化的.但它们是零初始化的,实际上它们int是同一个东西.对于类类型,它不一定是同一个东西.

这就是说,我不看好这里的行为仅仅是初始化的顺序是不确定的,因此是一个可变的10个,其​​他20个,但不确定这是结束了.在某些其他方面可能没有定义,但我想不出任何其他理由.