听说常量成员必须明确intialized,但对我下面的编译:const成员未明确初始化,但编译
class someClass
{
int const x;
};
int main()
{
return 0;
}
听说常量成员必须明确intialized,但对我下面的编译:const成员未明确初始化,但编译
class someClass
{
int const x;
};
int main()
{
return 0;
}
如果一个类const限定成员变量,那么这个类定义的任何构造,这些变量必须在构造函数初始化列表初始化。如果任何定义的构造函数不初始化一个const限定的成员变量,则该程序是格式不正确的。
在您的示例代码中,someClass
没有用户声明的构造函数,因此存在隐式声明的默认构造函数。但是,如果该构造函数未被使用,那么它就没有被定义。由于您没有实例化任何对象,因此不使用构造函数。因此,您的示例代码没有任何错误。
如果你定义一个构造器类,而不是初始化const成员,
class someClass
{
someClass() { } // error, does not initialize const-qualified x
int const x;
};
,或者如果你是实例的someClass
一个实例(这将导致隐式声明的默认构造函数来定义),那么该计划将是不合格的。
试试这个:
int main()
{
someClass obj;
return 0;
}
既然你的天堂” t实例化你的对象,你的编译器不会抛出错误。你可能知道初始化x
的正确方法,但我为了以防万一。
class someClass
{
int const x;
public:
someClass():x(10){}
};
什么是您的编译器版本? – sukru 2010-07-30 00:49:25
最新版本的g ++。 – user383352 2010-07-30 00:57:20