【问题标题】:Are static class variables initialized before first call of static member function?静态类变量是否在第一次调用静态成员函数之前初始化?
【发布时间】:2014-07-22 15:18:23
【问题描述】:

c.hpp:

class C
{
private:
    static SomeClass var;

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

c.cpp:

SomeClass C::var;

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

【问题讨论】:

  • 您实际上可能会收到链接错误,因为您尚未定义 C::var :)

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


【解决方案1】:

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

技术术语是“静态初始化命令惨败”。这是真实的,并且可以用谷歌搜索。

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

【讨论】:

    猜你喜欢
    • 2020-12-09
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    相关资源
    最近更新 更多