在 C 11 标准的早期版本中,移动构造函数和赋值运算符的隐式生成是辩论的话题。这导致后续草案发生变化,导致当前可用的编译器出现以下行为:
自 11 月发布 C 标准 (N3225) 以来,隐式移动构造函数和赋值运算符可以在以下条件下生成:
在早期草稿中不包含默认移动构造函数/赋值实现的决定是出于对潜在混乱和意外行为的担忧的结果。但是,后续修订通过收紧隐式移动生成的条件解决了这些问题。
如果您正在寻找一种在不编写显式移动构造函数/赋值运算符的情况下利用移动语义的方法,您可以使用[GManNickG的宏](https://stackoverflow.com/a/12316884/8674521)。该宏为您的类生成必要的移动语义。
通过实现移动语义,您也可以选择不提供交换成员函数。
以上是为什么早期 C 11 草案中没有默认移动实现?的详细内容。更多信息请关注PHP中文网其他相关文章!