【发布时间】:2010-07-30 00:46:08
【问题描述】:
我听说 const 成员必须显式初始化,但以下为我编译:
class someClass
{
int const x;
};
int main()
{
return 0;
}
【问题讨论】:
-
你的编译器版本是多少?
标签: c++ constructor initialization g++ constants
我听说 const 成员必须显式初始化,但以下为我编译:
class someClass
{
int const x;
};
int main()
{
return 0;
}
【问题讨论】:
标签: c++ constructor initialization g++ constants
如果一个类有 const 限定的成员变量,那么对于为该类定义的任何构造函数,这些变量必须在构造函数初始化器列表中初始化。如果任何已定义的构造函数未初始化 const 限定的成员变量,则程序是非良构的。
在您的示例代码中,someClass 没有用户声明的构造函数,因此有一个隐式声明的默认构造函数。但是,如果未使用该构造函数,则未定义它。由于您没有实例化任何someClass 对象,因此不使用构造函数。因此,您的示例代码没有任何错误。
如果你要为类定义一个构造函数而不初始化 const 成员,
class someClass
{
someClass() { } // error, does not initialize const-qualified x
int const x;
};
或者如果您要实例化someClass 的实例(这将导致定义隐式声明的默认构造函数),那么程序将是错误的。
【讨论】:
试试这个:
int main()
{
someClass obj;
return 0;
}
由于您还没有实例化您的对象,您的编译器没有抛出错误。你可能知道初始化x 的正确方法,但我把它记下来以防万一。
class someClass
{
int const x;
public:
someClass():x(10){}
};
【讨论】: