在没有初始化列表的情况下,在c ++的头文件中为const int赋值

时间:2012-11-20 20:55:54

标签: c++ header integer const initialization-list

我有17个整数常量,我希望在我的班级中保持私有。是否真的有必要使用初始化列表?

我在某处读到了我可以为头文件中的常量赋值,但它似乎不起作用。我收到此错误消息:

sorry, unimplemented: non-static data member initializers

2 个答案:

答案 0 :(得分:4)

  

是否真的有必要使用初始化列表?

在现代(2011年代)的C ++中,没有。在旧版本的语言中,是的。

您的错误消息很抱歉您的编译器不支持非静态成员的新初始化语法。假设您正在使用GCC(因为我从该编译器中识别出该错误),那么根据this page,您需要升级到该功能的至少4.7版本。

或者,因为它们是私有且常量的,所以您可以考虑将它们从类中移出到类的实现文件中的本地命名空间中。当然,这只有在您不需要从任何内联成员函数访问它们时才有效。

最后,如果它们对于类的所有实例具有相同的值(很可能,因为它们是const并且您能够独立于构造函数参数初始化它们),您可以声明它们{{ 1}}。然后可以在声明中对它们进行初始化(尽管较旧的编译器可能只允许它们具有整数类型)。但是,如果它们是 odr-used (粗略地说,如果你需要一个指针或引用它们),那么它们也需要在一个源文件中定义。

答案 1 :(得分:0)

·H:

class MyClass {
    public:
        MyClass();
        ~MyClass();

        int doSomething();

    private:
        const int m_newint = 1;
        const int m_dosomething = 2;
};

.CC:

MyClass::MyClass() {}
MyClass::~MyClass() {}

int MyClass::doSomething() {
    return m_dosomething;
}

是有效的C ++ 11代码,请确保将编译器设置为-std=c++11以使用 特征