假设我们有两个翻译单元:
//--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, c
和 d, e, f
。
但不确定是先a, b, c
再d, e, f
还是反过来。
或者甚至是交错顺序(比如,a, d, b, c, e, f
),尽管我认为大多数实现会在单个翻译单元中初始化所有全局变量行,所以除了在多线程中,我认为这不会在实践中发生。
关于c++ - 不同翻译单元中的变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24578654/