C++ 零法则 &什么是构造函数"user-declared"?

C++ Rule of Zero & what is "user-declared" constructor?

本文关键字:构造函数 user-declared 什么 C++      更新时间:2023-10-16

在Orbit的澄清中的轻度比赛,我已经缩小了我的帖子。

阅读本文后:零规则,

我最了解的是,但我仍然想解决一些我遇到的不清楚的问题:

1。看这句话:

如果X类的定义没有明确声明移动构造函数,则在且仅当以下情况下,将隐式声明为默认值

x没有用户指定的复制构造函数,

x没有用户指定的复制分配运算符,

x没有用户指定的移动分配运算符,

x没有用户指定的驱动器,

移动构造函数不会被隐式定义为已删除。

所有5个语句都应该共存(共享an an and and&quot"关系)或其中一些(共享an an n and and" or quot"关系)?

2。复制constructor 复制分配运算符...含义?

  • 在.h文件中声明它(上面的任何列表中的任何一个),但未实现它被视为用户指定?

  • 在.h文件中声明它(上面的任何一个列表),并指定&quot&quot&quort;或&quot =默认;;被认为是用户指定的?

  • 在带有空手镯的.h文件中声明它(上面的任何一个列表),{},被视为用户 - 列表?

恭喜,

etay

用户声明的构造函数是由程序员编写的构造函数,而不是编译器添加的构造函数。&quot'用户指标"隐式声明"是相反的。在这种情况下。

除非您的班级发生任何条件,否则您的班级将具有隐式声明为默认的移动构造函数。因此,这是"负"answers"否定"。它们都必须碰巧获得隐式声明为默认移动构造函数。

在您提到的所有情况下,即使被删除,构造函数也是用户指定的。

这些规则的原因是与pre-c 11的复古兼容。当用户宣布复制构造函数时,也会发送给他们。如果您转到C 11编译器,并且移动构造函数是不加区分的,则行为将会改变。以前发送了复制构造函数的呼叫,现在转到幻影移动构造函数,用户可能不知道。

因此,每次编译器看到复制构造函数或分配运算符(这意味着该类管理其资源)时,行为会退回到pre-c 11和移动构造函数中,不会被隐式声明。