不同翻译单元的变量初始化
Variable initialization in different translation unit
假设有两个翻译单位:
//--a.cpp--//
int a;
int b;
int c;
int main(){ }
//--b.cpp--//
int d;
int e;
int f;
该程序不启动线程。因此(3.6.2/2)
变量的初始化是不确定排序的关于变量的初始化,在不同的翻译单元。
这是否意味着只有在一个翻译单元(如b.cpp
)的所有变量初始化之后,实现才开始初始化另一个翻译单元(a.cpp
)的变量?
翻译单元中全局变量的初始化是按定义顺序进行的,所以a, b, c
和d, e, f
。
但是如果是a, b, c
,然后是d, e, f
,或者如果是相反的,它是未指定的。
或甚至在交错的顺序(说,a, d, b, c, e, f
),虽然我认为大多数实现将初始化所有全局变量从一个翻译单元在单行,所以除了在多线程,我不认为这将在实践中发生。
不,不确定排序意味着它们以某种顺序出现,但该顺序未指定。一个翻译单元中的变量将在另一个单元中的变量之前或之后初始化。
相关文章:
- 为什么C++有不同的变量初始化方式?
- 静态 constexpr 成员变量初始化
- C++不同的变量初始化
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 是变量初始化失败吗?
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 类静态变量初始化顺序
- 使用 constinit 变量初始化 constexpr 变量
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 使用全局变量初始化不同编译单元中的其他全局变量
- 使用默认构造函数引用成员变量初始化错误
- 宏的 if 语句中的变量初始化
- 不稳定的C :每行适应性变化多变量初始化
- 同一函数中的静态函数变量初始化顺序
- C 语言中的静态变量初始化
- 错误:调用'begin(long double [nPoints])'没有匹配函数;使用硬编码的 int 与整数变量初始化向量
- 类POD成员变量初始化
- 尝试捕获类变量初始化的范围
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- 多变量初始化编译器支持