首页 >后端开发 >C++ >为什么早期 C 11 草案中没有默认移动实现?

为什么早期 C 11 草案中没有默认移动实现?

Barbara Streisand
Barbara Streisand原创
2024-11-19 19:13:02276浏览

Why Were Default Move Implementations Absent in Early C  11 Drafts?

为什么早期 C 11 草案中没有默认移动实现?

在 C 11 标准的早期版本中,移动构造函数和赋值运算符的隐式生成是辩论的话题。这导致后续草案发生变化,导致当前可用的编译器出现以下行为:

隐式移动语义

自 11 月发布 C 标准 (N3225) 以来,隐式移动构造函数和赋值运算符可以在以下条件下生成:

  • 该类没有用户声明的副本构造函数。
  • 该类没有用户声明的复制赋值运算符。
  • 该类没有用户声明的移动赋值运算符。
  • 该类没有用户声明的析构函数.
  • 移动构造函数不会隐式定义为已删除。

解释早期草稿中的缺失

在早期草稿中不包含默认移动构造函数/赋值实现的决定是出于对潜在混乱和意外行为的担忧的结果。但是,后续修订通过收紧隐式移动生成的条件解决了这些问题。

解决方法

如果您正在寻找一种在不编写显式移动构造函数/赋值运算符的情况下利用移动语义的方法,您可以使用[GManNickG的宏](https://stackoverflow.com/a/12316884/8674521)。该宏为您的类生成必要的移动语义。

通过实现移动语义,您也可以选择不提供交换成员函数。

以上是为什么早期 C 11 草案中没有默认移动实现?的详细内容。更多信息请关注PHP中文网其他相关文章!

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