我有以下情况:
class Foo
{
public:
static const Foo memberOfFoo;
........
}
Run Code Online (Sandbox Code Playgroud)
所以事情是我无法在我声明它的同一行初始化它,并且,我无法通过构造函数中的Initializations List初始化它,有人知道该怎么做吗?
把它放在类定义之外然后:
const Foo Foo::memberOfFoo = whateverValue;
Run Code Online (Sandbox Code Playgroud)
这是定义Foo::memberOfFoo,它可以提供初始化程序并且必须进入.cpp文件(就像对象的任何其他定义一样,它只能在整个程序中出现一次,否则会出现链接器错误).
有时您会发现没有静态数据成员定义的代码:
struct A {
// sometimes, code won't have an "const int A::x;" anywhere!
static const int x = 42;
};
Run Code Online (Sandbox Code Playgroud)
省略这样的定义只有在A::x从不采用地址且永远不会传递给引用参数时才有效.一种更正式的方式来说明省略定义何时有效:"当所有使用A :: x时立即读取A :: x的存储值".许多静态整数常量就是这种情况.