在第一次调用静态成员函数之前是否初始化了静态类变量?

时间:2014-07-22 15:18:24

标签: c++ c++11 initialization static-members

c.hpp:

class C
{
private:
    static SomeClass var;

public:
    static void f()
    {
        // Uses var;
    }
};

c.cpp:

SomeClass C::var;

致电C::f()总是安全的吗?例如,从一个不同编译单元中定义的某个全局变量的构造函数?

1 个答案:

答案 0 :(得分:4)

没有。除功能本地静态变量之外的所有静态变量的初始化顺序都会以最糟糕的方式导致灾难。

技术术语是“静态初始化订单Fiasco”。这是真实的,也是可谷歌的。

诀窍是不要以任何形式使用全局变量。函数本地静态是非常有用的,如果你知道它们何时非常有用,应该在适当的时候使用它。