在C ++中,假设我有一个类Thing,我希望它包含一个类型的const成员,如:
class Thing
{
public:
Thing();
private:
static const Thing THING;
};
但我认为这不如上所述。我怎么能这样做?
答案 0 :(得分:3)
以下小程序使用GCC 3.4.5(MinGW)编译和链接:
class Thing
{
public:
Thing();
private:
static const Thing THING;
};
Thing::Thing()
{}
// We must instantiate the static variable somewhere, like inside 'Thing.cpp'
const Thing Thing::THING = Thing();
int main(int argc, char* argv[])
{
return 0;
}
答案 1 :(得分:0)
我不确定标准对此有何看法,但我不明白为什么它不起作用。它在我的gcc上编译得很好。你还记得在类声明之外实例化静态对象吗?
答案 2 :(得分:0)
没有。你不能。
由于SCMadsen和int3已经发布,你可以在类范围内为任何类型声明静态const,只要它被正确定义(在cpp文件中)并初始化,但它不能是编译时常量。
编译时间常量是一个常量,可以用作模板参数和内置数组的大小。这些常量也可以比运行时常量更好地优化。目前,AFAIK只有内置的数字类型可以作为编译时常量
BTW的原因是这个常量应该在编译时进行评估(类似于文字)。