为什么 C 需要用户提供的默认构造函数来默认构造 const 对象?
C 标准规定,如果一个程序调用 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中文网其他相关文章!