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

Assigning values to const int in headerfile in c++ without initialization list

本文关键字:headerfile 中为 const 赋值 int c++ 情况下 初始化 列表      更新时间:2023-10-16

我得到了17个整数常量,我想在类中将其作为私有常量。真的有必要使用初始化列表吗?

我在某个地方读到,我可以在头文件中为常量赋值,但似乎不起作用。我收到这个错误消息:

sorry, unimplemented: non-static data member initializers

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

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

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

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

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

.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以使用特色