c++ - 此代码会产生未定义的行为还是仅仅是未指定的行为?

标签 c++ undefined-behavior primitive-types unspecified-behavior static-order-fiasco

假设我们有两个编译单元,如下所示:

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

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

当我在 VC2010 上尝试时,它首先将 value1value2 初始化为零。 value1value2 不是都动态初始化并且默认初始化不适用于它们吗?

谢谢,

最佳答案

3.6.2/1 说“具有静态存储持续时间 (3.7.1) 的对象应在任何其他初始化发生之前进行零初始化 (8.5)”。

所以你是对的,它们没有被默认初始化。但是它们是零初始化的,这实际上对于 int 是一样的。对于类类型,它不一定是同一件事。

也就是说,我不保证这里的行为只是未指定初始化顺序,因此一个变量最终为 10 而另一个 20,但未指定哪个是哪个。它可能由于其他原因未定义,但我想不出任何原因。

关于c++ - 此代码会产生未定义的行为还是仅仅是未指定的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5986668/

相关文章:

c++ - 为什么 fwrite 向我抛出访问冲突?

c++ - std::swap between std::shared_ptr<A> 其中 A 具有动态数组

c++ - 在没有线程的情况下构建 Boost ASIO

c++ - if语句中定义的局部变量的行为异常

c# - .net 中的原始类型

C++ 给出大量奇怪的答案(afaik 不会溢出)

c++ - <stddef.h> 中的 'offsetof' 宏是否会调用未定义的行为?

c++ - 由于在序列点之间修改变量两次而导致的 UB 是否会延续到 "inner"范围?

c - 存储(和打印)整数的最大数据类型是什么?

java - InputStream.read() 返回的 int 值代表什么?