const成员未显式初始化但编译

时间:2010-07-30 00:46:08

标签: c++ constructor initialization g++ const

我听说必须明确初始化const成员,但以下内容为我编译:

class someClass
{
    int const x;
};

int main()
{
    return 0;
}

2 个答案:

答案 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){}
};