【发布时间】:2011-08-26 19:23:54
【问题描述】:
假设我有一个 T 类
- T 没有虚函数。
- T 实例没有状态。
- T 有自己的静态成员实例。
- 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
};
// 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;
}
【问题讨论】:
-
很好的问题和一个有趣的想法!
-
通过一个简单的枚举(没有额外的状态),这给了你什么?
-
请发布一个您实际打算如何使用 Switch 类的示例。
-
类声明在标题中,运算符和成员定义在某个 cpp 文件中,对吗?否则,这个问题是关于单一定义规则的,而不是关于静态初始化顺序的惨败。请说明您的代码示例是否是两个单独的文件。
-
哎呀,对不起。这确实应该在两个单独的文件中。
标签: c++ static initialization stateless