【问题标题】:const member isn't explicitly initialized but compilesconst 成员未显式初始化,但可以编译
【发布时间】:2010-07-30 00:46:08
【问题描述】:

我听说 const 成员必须显式初始化,但以下为我编译:

class someClass
{
    int const x;
};

int main()
{
    return 0;
}

【问题讨论】:

  • 你的编译器版本是多少?

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 我认为您的意思是“定义构造函数”?
  • @Jacob:析构函数......构造函数......同样的事情,对吧? :-O 谢谢指正。
【解决方案2】:

试试这个:

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

由于您还没有实例化您的对象,您的编译器没有抛出错误。你可能知道初始化x 的正确方法,但我把它记下来以防万一。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 2014-09-08
    • 2015-04-27
    相关资源
    最近更新 更多