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

标签 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()总是安全的吗?例如,来自在不同编译单元中定义的某个全局变量的构造函数?

最佳答案

没有。除了函数局部静态变量之外的所有初始化顺序都会以最糟糕的方式导致灾难。

技术术语是“静态初始化订单失败”。这是真实的,并且可以通过谷歌搜索。

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

关于c++ - 静态类变量是否在第一次调用静态成员函数之前初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24891283/

相关文章:

c++ - Const 数组从另一个 const 数组初始化

C++ 为什么这种方式很危险?

c++ - 如何与特定模板特化成为 friend ?

C++ 错误 : was not declared in this scope with private after public

c++ - `while (i != 0 && (a[i].p != 0 || a[i].q != 0));` 除了卡住还能做什么?

c++ - 在双向链表中间插入节点

c++ - 遍历 multimap 中的一个组我怎么知道我是在第一个还是最后一个元素中?

python - 二维数组到数据框中的两列

apache - apache2 中的初始化模块

c++ - 是类型名称=名称;在 C++ 中有用吗?