4

可能重复:
未初始化的 const

我知道 const 对象需要初始化。

所以对于下面的代码,

class sample
{};

int main()
{
   const sample obj;
   return 0;
}

编译器会抱怨,因为 const 对象obj未初始化。

但是当我使用默认构造函数修改代码(如下所示)时,编译器不会抛出任何错误。

class sample
{
    public:
       sample() { }
};

int main()
{
    const sample obj;
    return 0;
}

新添加的默认 ctor 满足编译器的要求是什么?

4

2 回答 2

5

新添加的默认 ctor 满足编译器的要求是什么?

const因为这是 C++ 标准在使用限定符声明对象时强加的要求。

参考:

C++03 8.5 初始化器 8 声明
器 §9:

如果没有为对象指定初始化程序,并且该对象是(可能是 cv 限定的)非 POD 类类型(或其数组),则该对象应默认初始化;如果对象是 const 限定类型,则基础类类型应具有用户声明的默认构造函数。否则,如果没有为非静态对象指定初始化器,则该对象及其子对象(如果有)具有不确定的初始值 90);如果对象或其任何子对象是 const 限定类型,则该程序是非良构的。

于 2012-01-21T10:37:24.930 回答
2

您正在对 const 限定类型进行默认初始化。C++(C++11 草案 n3290)标准对此有这样的说法(§8.5/6 Initializers):

如果程序要求对 const 限定类型 T 的对象进行默认初始化,则 T 应是具有用户提供的默认构造函数的类类型。

您的第一个示例不符合此(没有用户提供的构造函数)。第二个可以。

于 2012-01-21T10:36:36.320 回答