C++ 静态类变量是否在第一次调用静态成员函数之前初始化?
c、 水电站: c、 cpp: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()是否总是安全的?例如,从另一个编译单元中定义的某个全局变量的构造函数开始?否。除函数局部静态变量外,所有函数的初始化顺序都可能导致灾难 技术术语是“静态初始化命令失败”。这是真实的,而且容易收集 诀窍是不要以任何形式使用全局变量。
class C
{
private:
static SomeClass var;
public:
static void f()
{
// Uses var;
}
};
调用
C::f()
是否总是安全的?例如,从另一个编译单元中定义的某个全局变量的构造函数开始?否。除函数局部静态变量外,所有函数的初始化顺序都可能导致灾难
技术术语是“静态初始化命令失败”。这是真实的,而且容易收集
诀窍是不要以任何形式使用全局变量。函数局部静态非常有用,如果您知道它们什么时候非常有用,就应该在适当的时候使用。否。除函数局部静态变量外,所有变量的初始化顺序都可能导致灾难 技术术语是“静态初始化命令失败”。这是真实的,而且容易收集
诀窍是不要以任何形式使用全局变量。函数本地静态非常有用,如果您知道它们什么时候非常有用,应该在适当的时候使用。您实际上可能会得到一个链接错误,因为您没有定义
C::var
:)您实际上可能会得到一个链接错误,因为您没有定义C::var
:)
SomeClass C::var;