首页 >后端开发 >C++ >C 11 编译器何时自动生成移动操作?

C 11 编译器何时自动生成移动操作?

Patricia Arquette
Patricia Arquette原创
2024-11-27 07:53:12236浏览

When Does the C  11 Compiler Automatically Generate Move Operations?

自动生成移动操作的规则

在 C 11 中,编译器自动生成移动操作的能力与复制操作的规则不同在 C 98 中。

移动构造函数和移动赋值运算符

在以下条件下,编译器会自动生成移动构造函数和移动赋值运算符:

  • 该类没有用户声明的复制构造函数。
  • 该类没有用户声明的复制赋值运算符。
  • 该类没有显式声明的移动构造函数或移动赋值

不自动生成移动操作的情况

如果满足以下任一条件,编译器将不会自动生成移动操作:

  • 该类具有用户声明的复制构造函数和/或复制赋值运算符。
  • 该类具有显式声明但未定义的移动构造函数或移动赋值运算符。
  • 该类声明了析构函数。

验证自动生成规则的工具

以下资源提供了自动生成特殊规则的直观表示成员,包括移动操作:

[Howard Hinnant 的 ACCU 2014 演示幻灯片图片](https://i.sstatic.net/b2VBV.png)

其他说明

表中的红色方块表示已弃用的行为。如果您希望避免依赖于弃用,请考虑遵循 C 98/03 中的“3 规则”:如果声明析构函数,则声明两个副本成员,或者声明至少一个副本成员。

以上是C 11 编译器何时自动生成移动操作?的详细内容。更多信息请关注PHP中文网其他相关文章!

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