const 对象的编译器投诉未初始化

nit*_*ian 4 c++ constructor constants default-constructor

可能重复:
未初始化的常量

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

所以对于下面的代码,

class sample
{};

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

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

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

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

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

新添加的默认ctor做了哪些让编译器满意的事情?

Alo*_*ave 5

新添加的默认ctor做了哪些让编译器满意的事情?

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

参考:

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

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

  • @LinuxPenseur - 编译器生成的构造函数不会初始化 C 语言未初始化的类型。如果是这样,C++ 将在整个互联网上失去大量的 C 基准。 (2认同)