假设我们有两个编译单元,如下所示:
// a.cpp
extern int value2;
int value1 = value2 + 10;
// b.cpp
extern int value1;
int value2 = value1 + 10;
当我在 VC2010 上尝试时,它首先将 value1
和 value2
初始化为零。 value1
和 value2
不是都动态初始化并且默认初始化不适用于它们吗?
谢谢,
最佳答案
3.6.2/1 说“具有静态存储持续时间 (3.7.1) 的对象应在任何其他初始化发生之前进行零初始化 (8.5)”。
所以你是对的,它们没有被默认初始化。但是它们是零初始化的,这实际上对于 int
是一样的。对于类类型,它不一定是同一件事。
也就是说,我不保证这里的行为只是未指定初始化顺序,因此一个变量最终为 10 而另一个 20,但未指定哪个是哪个。它可能由于其他原因未定义,但我想不出任何原因。
关于c++ - 此代码会产生未定义的行为还是仅仅是未指定的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986668/