c++ - 不同翻译单元中的变量初始化

标签 c++ initialization

假设我们有两个翻译单元:

//--a.cpp--//

int a;
int b; 
int c;

int main(){ }

//--b.cpp--//


int d;
int e;
int f;

该程序不启动线程。因此 (3.6.2/2)

the initialization of a variable is indeterminately sequenced with respect to the initialization of a variable defined in a different translation unit.

这是否意味着只有在一个翻译单元(例如b.cpp)中的所有变量都初始化之后,实现才开始在另一个翻译单元(a.cpp)中初始化变量>)?

最佳答案

翻译单元中全局变量的初始化是按定义顺序进行的,所以 a, b, cd, e, f

但不确定是先a, b, cd, e, f还是反过来。

或者甚至是交错顺序(比如,a, d, b, c, e, f),尽管我认为大多数实现会在单个翻译单元中初始化所有全局变量行,所以除了在多线程中,我认为这不会在实践中发生。

关于c++ - 不同翻译单元中的变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24578654/

相关文章:

c++ - 尽管已初始化变量,编译器仍给出未初始化的局部变量错误

c++ - wglShareLists 失败并出现错误 6 : ERROR_INVALID_HANDLE The handle is invalid

Windows 上 Linux 的 C++ 开发

c++ - 编译 Box2D 时创建 libBox2D.a?

c++ - 这样的初始化列表在 C++11 中合法吗?

在 super.init 之前在表达式中使用初始化属性的 Swift 错误

java - 为什么此代码有效?先赋值再声明?

c++ - 将 int 矩阵数组放入 C++ 对象时出现问题

MacOS 上的 C++ : show date and time issue

c++ - 创建一个求和函数以仅对 vector 的一部分求和