C++静态初始化无状态类

Tho*_*ing 7 c++ static initialization stateless

假设我有一个T级

  1. T没有虚函数.
  2. T实例没有状态.
  3. T具有自身的静态成员实例.
  4. T本身没有其他状态.

C++静态初始化惨败可以破坏我的程序吗?我不这么认为,因为即使其中一个静态实例在使用之前没有初始化,这也不重要,因为T对象是无状态的.

我有兴趣为类似枚举的类这样做:


// Switch.h

class Switch {
public:
    static Switch const ON;
    static Switch const OFF;
    bool operator== (Switch const &s) const;
    bool operator!= (Switch const &s) const;
private:
    Switch () {}
    Switch (Switch const &); // no implementation
    Switch & operator= (Switch const &); // no implementation
};
Run Code Online (Sandbox Code Playgroud)
// Switch.cpp

Switch const Switch::ON;
Switch const Switch::OFF;

bool Switch::operator== (Switch const &s) const {
    return this == &s;
}

bool Switch::operator!= (Switch const &s) const {
    return this != &s;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*k B 2

为了回答你的问题的第一部分,如果T有一个有副作用的构造函数,那么你实际上可能会被静态初始化惨败所烧伤。