首页 > 后端开发 > C++ > C 98 和 C 11 之间的自动移动操作生成规则有何不同?

C 98 和 C 11 之间的自动移动操作生成规则有何不同?

Linda Hamilton
发布: 2024-11-29 05:32:16
原创
1051 人浏览过

How Do Automatic Move Operation Generation Rules Differ Between C  98 and C  11?

自动移动操作的生​​成规则

在 C 98 中,编译器可以通过成员方式复制自动创建复制构造函数和复制赋值运算符。随着移动语义的引入,这个过程扩展到了 C 11。但是,自动生成移动操作的规则与复制操作的规则不同。

Howard Hinnant 的 ACCU 2014 演示文稿提供了这些规则的简要概述。下表总结了要点:

</p>
<table>
<thead><tr>
<th> </th>
<th>Destructor</th>
<th>Move Constructor</th>
<th>Move Assignment Operator</th>
</tr></thead>
<tbody>
<tr>
<td>C  98/03</td>
<td>No</td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td>C  11 (Defect Report 1492)</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
</tr>
<tr>
<td>C  11 Final</td>
<td>Yes</td>
<td>Yes<sup>*</sup>
</td>
<td>Yes<sup>*</sup>
</td>
</tr>
</tbody>
</table>
<p>

是:自动生成。
否:不会自动生成。

*但仅隐式定义(未声明或声明=默认)。显式定义抑制生成。

这些规则表明,虽然移动构造函数和移动赋值运算符通常在 C 11 中自动生成,但在某些情况下可能不会自动生成。例如,如果显式定义了析构函数,则不会生成移动操作。同样,显式定义移动操作本身会抑制自动生成。

以上是C 98 和 C 11 之间的自动移动操作生成规则有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板