首页 >后端开发 >C++ >为什么 C 类必须有用户定义的默认构造函数来默认构造'const”对象?

为什么 C 类必须有用户定义的默认构造函数来默认构造'const”对象?

Barbara Streisand
Barbara Streisand原创
2024-11-29 10:10:11618浏览

Why Must C   Classes Have a User-Defined Default Constructor to Default-Construct a `const` Object?

为什么 C 需要用户提供的默认构造函数来默认构造 const 对象?

C 标准规定,如果一个程序调用 const 限定类型的对象的默认初始化时,底层类类型必须拥有用户提供的默认构造函数。这个要求源于以下事实:

  • POD(普通旧数据)类缺少默认初始化:如果 POD 类没有配备用户定义的构造函数,则它是有资格进行默认初始化。然而,缺乏初始化的 POD 对象没有实际用途,因为它们的状态仍然不确定。
  • Const 对象需要立即初始化: 与 POD 对象不同,const 对象需要立即初始化,因为它们的状态不能被确定。一旦建立就改变。如果 POD 类型的 const 对象未初始化,它将变得无用,因为它的值无法修改。

为了防止这种困境,标准规定不能从缺少 POD 类型构造 const 对象用户提供的默认构造函数。这确保 const 对象始终在创建时初始化。

POD 和非 POD 类之间的区别

为了澄清,该标准的要求专门适用于非 const 对象-POD 课程。 POD 类缺乏虚函数或基类,并且具有本身就是 POD 的数据成员,即使没有用户定义的构造函数,也可以默认初始化。相反,非 POD 类需要用户提供的默认构造函数来启用默认初始化。

说明性示例

考虑以下代码片段:

struct B {
  B(): x(42) {}
  int doSomeStuff() const { return x; }
  int x;
};

struct A {
  A() {} // Required by the standard
  B b; // Illustration purpose
};

int main() {
  const A a; // Valid due to user-provided default constructor in A.
}

在此示例中,结构体 A 的 const 对象 'a' 可以默认构造,因为 A 有一个用户提供的默认构造函数,满足标准对非 POD 类的要求。

以上是为什么 C 类必须有用户定义的默认构造函数来默认构造'const”对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn