我最近在代码审查中遇到了这个与C++静态初始化顺序相关的查询.
在这里,我想知道在调用静态对象构造函数之前是否保证静态成员变量被初始化?
MyClass.h:
typedef int (*MyFunc)(int);
class MyClass {
MyClass(MyFunc fptr) {
mFunc = fptr;
}
static MyFunc mFunc;
}
Run Code Online (Sandbox Code Playgroud)
MyClass.cpp:
MyFunc MyClass::mFunc = nullptr;
Run Code Online (Sandbox Code Playgroud)
MyDifferentClass.h:
MyDifferentClass {
public:
static int MyStaticFunc(int);
}
Run Code Online (Sandbox Code Playgroud)
MyDifferentClass.cpp:
static MyClass myClassObj(MyDifferentClass::MyStaticFunc);
Run Code Online (Sandbox Code Playgroud)
在代码中,将在创建之前mFunc初始化为?查询的原因是如果订单不能保证,那么可能会再次初始化为.nullptrmyClassObjmFuncnullptr