我读了this,我想不出在文件X::_x
中初始化之前将使用X.cpp
的情况(假设编译器处理X.h
和{ {1}}一个接一个地)
有人可以向我解释这种情况会怎样吗?
答案 0 :(得分:5)
如果有多个使用静态初始化的转换单元 * ,则会发生静态初始化顺序失败,其中一个初始化例程需要另一个生成的数据。
如果您拥有的是单个标头和单个翻译单元,则静态初始化顺序fiasco不适用,因为initialization order within the same unit is well defined(它遵循声明的顺序)。
* 这是一个cpp文件的奇特名称。
答案 1 :(得分:0)
我认为只有页面上的代码才会发生这种情况,但是可能会有更多代码,行为与页面上描述的相同。在其中一个文件中,可以有一个X类型的静态对象:
// File X3.cpp
#include "X.h"
X x__;
现在,如果:
X类的默认构造函数调用someMethod
// File X2.cpp
X::X() {
someMethod();
}
和
然后在x_初始化之前调用someMethod()。