我可以在C ++中拥有类(作为成员)的编译时常量实例吗?

时间:2009-11-23 09:31:24

标签: c++

在C ++中,假设我有一个类Thing,我希望它包含一个类型的const成员,如:

class Thing
{
    public:
        Thing();
    private:
        static const Thing THING;
};

但我认为这不如上所述。我怎么能这样做?

3 个答案:

答案 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的原因是这个常量应该在编译时进行评估(类似于文字)。