首页 > 后端开发 > C++ > C 编译器何时自动生成移动构造函数和赋值运算符?

C 编译器何时自动生成移动构造函数和赋值运算符?

DDD
发布: 2024-12-19 09:34:10
原创
284 人浏览过

When Do C   Compilers Automatically Generate Move Constructors and Assignment Operators?

C 中自动生成移动操作

在 C 98 中,编译器可以自动为类生成复制构造函数和复制赋值运算符。然而,随着 C 11 中移动语义的引入,关于移动操作自动生成的问题出现了。

移动构造函数和移动赋值运算符会自动生成吗?

否,与复制构造函数和复制赋值运算符不同,编译器不会自动为具有用户定义构造函数或赋值的类生成移动操作

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

如果满足以下条件,则不会自动生成移动操作:

  • 该类有用户- 定义的构造函数或复制构造函数。
  • 该类有用户定义的赋值运算符或复制赋值运算符。
  • 该类有一个非平凡的析构函数。
  • 该类有一个带有非平凡析构函数的基类。
  • 该类包含一个不可复制或不可移动成员。

确定自动生成 Move操作

要确定是否为类自动生成移动操作,请考虑以下事项:

  • 如果类只有默认构造函数而没有用户定义的构造函数或赋值运算符,生成移动操作。
  • 如果类有用户定义的构造函数或赋值运算符,则必须显式声明移动操作。
  • 如果类具有非平凡析构函数或具有非平凡析构函数的基类,则必须显式声明移动操作。

弃用自动移动操作的生​​成

在 C 20 中,不推荐自动生成移动操作,如果该类声明析构函数或任何复制成员(复制构造函数、复制赋值运算符)。为了确保与 C 未来版本的兼容性,建议为需要它们的类显式声明移动操作。

以上是C 编译器何时自动生成移动构造函数和赋值运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!

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