2010-07-30 41 views

回答

6

如果一个类const限定成员变量,那么这个类定义的任何构造,这些变量必须在构造函数初始化列表初始化。如果任何定义的构造函数不初始化一个const限定的成员变量,则该程序是格式不正确的。

在您的示例代码中,someClass没有用户声明的构造函数,因此存在隐式声明的默认构造函数。但是,如果该构造函数未被使用,那么它就没有被定义。由于您没有实例化任何对象,因此不使用构造函数。因此,您的示例代码没有任何错误。

如果你定义一个构造器类,而不是初始化const成员,

class someClass 
{ 
    someClass() { } // error, does not initialize const-qualified x 
    int const x; 
}; 

,或者如果你是实例的someClass一个实例(这将导致隐式声明的默认构造函数来定义),那么该计划将是不合格的。

+2

我想你的意思是“定义一个构造函数”? – Jacob 2010-07-30 00:56:34

+2

@Jacob:析构函数...构造函数...同样的事情,对吧? :-O感谢您的更正。 – 2010-07-30 00:57:53

+0

哈哈,没问题:) – Jacob 2010-07-30 07:40:13

4

试试这个:

int main() 
{ 
    someClass obj; 
    return 0; 
} 

既然你的天堂” t实例化你的对象,你的编译器不会抛出错误。你可能知道初始化x的正确方法,但我为了以防万一。

class someClass 
{ 
    int const x; 
public: 
    someClass():x(10){} 
};