首页 > 后端开发 > C++ > 为什么早期 C 11 草案中没有隐式移动构造函数和赋值运算符?

为什么早期 C 11 草案中没有隐式移动构造函数和赋值运算符?

Linda Hamilton
发布: 2024-12-06 10:18:13
原创
577 人浏览过

Why Were Implicit Move Constructors and Assignment Operators Absent in Early C  11 Drafts?

早期 C 11 草案中的隐式移动构造函数和赋值运算符

尽管 C 中广泛实现了默认复制构造函数和赋值运算符,但C 11 标准的早期草案中缺少默认的移动构造函数和赋值运算符,这引起了人们的质疑

最初缺席的原因

移动操作的隐式生成一直是 C 社区中持续争论的主题。由于担心保留依赖于不可移动类型的代码,C 11 标准的早期草案缺乏这些隐式功能。此外,使用赋值运算符的 std::move 与不可移动对象的行为使问题变得复杂。

当前规范

根据 11 月 N3225 规范,如果类没有显式定义移动构造函数,它将在以下情况下隐式声明为默认值条件:

  • 没有用户声明的复制构造函数
  • 没有用户声明的复制赋值运算符
  • 没有用户声明的移动赋值运算符
  • 否用户声明的析构函数
  • 没有隐式删除移动构造函数

类似的条件适用于移动赋值运算符的隐式声明。这些更改与 N3203 和 N3201 中概述的原则一致,这些原则主张对隐式移动生成采用更严格的条件。

解决方法

在早期没有隐式移动操作的情况下C 11 草案中,一种解决方法是手动实现移动赋值运算符和移动构造函数。为了避免在每个类中实现这些运算符,可以采用宏解决方案。 GManNickG 在 Stack Overflow 问题中的回答提供了一个合适的例子。

以上是为什么早期 C 11 草案中没有隐式移动构造函数和赋值运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!

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