早期 C 11 草案中的隐式移动构造函数和赋值运算符
尽管 C 中广泛实现了默认复制构造函数和赋值运算符,但C 11 标准的早期草案中缺少默认的移动构造函数和赋值运算符,这引起了人们的质疑
最初缺席的原因
移动操作的隐式生成一直是 C 社区中持续争论的主题。由于担心保留依赖于不可移动类型的代码,C 11 标准的早期草案缺乏这些隐式功能。此外,使用赋值运算符的 std::move 与不可移动对象的行为使问题变得复杂。
当前规范
根据 11 月 N3225 规范,如果类没有显式定义移动构造函数,它将在以下情况下隐式声明为默认值条件:
类似的条件适用于移动赋值运算符的隐式声明。这些更改与 N3203 和 N3201 中概述的原则一致,这些原则主张对隐式移动生成采用更严格的条件。
解决方法
在早期没有隐式移动操作的情况下C 11 草案中,一种解决方法是手动实现移动赋值运算符和移动构造函数。为了避免在每个类中实现这些运算符,可以采用宏解决方案。 GManNickG 在 Stack Overflow 问题中的回答提供了一个合适的例子。
以上是为什么早期 C 11 草案中没有隐式移动构造函数和赋值运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!