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

use*_*352 2 c++ constructor initialization const g++

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

class someClass
{
    int const x;
};

int main()
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 6

如果一个类具有const限定的成员变量,那么对于为该类定义的任何构造函数,必须在构造函数初始化列表中初始化这些变量.如果任何已定义的构造函数未初始化const限定的成员变量,则该程序格式错误.

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

如果要为类定义构造函数而不初始化const成员,

class someClass
{
    someClass() { } // error, does not initialize const-qualified x
    int const x;
};
Run Code Online (Sandbox Code Playgroud)

或者如果你要实例化一个实例someClass(这将导致隐式声明的默认构造函数被定义),那么该程序将是错误的.

  • 我认为你的意思是"定义一个构造函数"? (2认同)
  • @Jacob:析构函数...构造函数......同样的事情,对吧?:-O谢谢你的纠正. (2认同)