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

C++ 静态类变量是否在第一次调用静态成员函数之前初始化?,c++,c++11,initialization,static-members,C++,C++11,Initialization,Static Members,c、 水电站: c、 cpp: class C { private: static SomeClass var; public: static void f() { // Uses var; } }; 调用C::f()是否总是安全的?例如,从另一个编译单元中定义的某个全局变量的构造函数开始?否。除函数局部静态变量外,所有函数的初始化顺序都可能导致灾难 技术术语是“静态初始化命令失败”。这是真实的,而且容易收集 诀窍是不要以任何形式使用全局变量。

c、 水电站:

c、 cpp:

class C
{
private:
    static SomeClass var;

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

调用
C::f()
是否总是安全的?例如,从另一个编译单元中定义的某个全局变量的构造函数开始?

否。除函数局部静态变量外,所有函数的初始化顺序都可能导致灾难

技术术语是“静态初始化命令失败”。这是真实的,而且容易收集


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

否。除函数局部静态变量外,所有变量的初始化顺序都可能导致灾难

技术术语是“静态初始化命令失败”。这是真实的,而且容易收集


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

您实际上可能会得到一个链接错误,因为您没有定义
C::var
:)您实际上可能会得到一个链接错误,因为您没有定义
C::var
:)
SomeClass C::var;