我听说必须明确初始化const成员,但以下内容为我编译:
class someClass
{
int const x;
};
int main()
{
return 0;
}
答案 0 :(得分:6)
如果一个类具有const限定的成员变量,那么对于为该类定义的任何构造函数,必须在构造函数初始化列表中初始化这些变量。如果任何已定义的构造函数未初始化const限定的成员变量,则该程序格式不正确。
在您的示例代码中,someClass
没有用户声明的构造函数,因此存在一个隐式声明的默认构造函数。但是,如果未使用该构造函数,则不会定义它。由于您没有实例化任何someClass
对象,因此不使用构造函数。因此,您的示例代码没有任何错误。
如果要为类定义构造函数而不初始化const成员,
class someClass
{
someClass() { } // error, does not initialize const-qualified x
int const x;
};
或者如果要实例化someClass
的实例(这会导致隐式声明的默认构造函数被定义),那么程序就会格式不正确。
答案 1 :(得分:4)
试试这个:
int main()
{
someClass obj;
return 0;
}
由于您尚未实例化对象,因此编译器不会抛出错误。您可能知道初始化x
的正确方法,但我为了以防万一而将其放下。
class someClass
{
int const x;
public:
someClass():x(10){}
};