小编iVo*_*oid的帖子

在初始化该类的静态对象之前,是否保证了类的静态成员的初始化?

我最近在代码审查中遇到了这个与C++静态初始化顺序相关的查询.

  1. 我在编译单元中有一个带有静态成员变量的类
  2. 我在不同的编译单元中使用构造函数创建了该类的静态对象

在这里,我想知道在调用静态对象构造函数之前是否保证静态成员变量被初始化?

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

c++ static

10
推荐指数
1
解决办法
174
查看次数

标签 统计

c++ ×1

static ×1