美文网首页
C++ 的 左值,右值 和 移动构造函数

C++ 的 左值,右值 和 移动构造函数

作者: wayyyy | 来源:发表于2021-07-25 04:05 被阅读0次

左值 lvalue 是有标识符、可以取地址的表达式,最常见的情况有:

  • 变量,函数或数据成员的名字
  • 返回左值引用的表达式,如 ++x、x = 1、cout << ' '字
  • 符串字面量如 "hello world"

右值是没有标识符、不可以取地址的表达式,一般也称之为"临时对象"。最常见的情况有:

  • 返回非引用类型的表达式,如 x++、x + 1、make_shared<int>(42)
  • 除字符串字面量之外的字面量,如 42、true

如何实现移动语义

  • 对象应该有分开的拷贝构造和移动构造函数(除非你只打算支持移动,不支持拷贝——如 unique_ptr)。
  • 对象应该有 swap 成员函数,支持和另外一个对象快速交换成员。
  • 在你的对象的名空间下,应当有一个全局的 swap 函数,调用成员函数 swap 来实现交换。支持这种用法会方便别人(包括你自己在将来)在其他对象里包含你的对象,并快速实现它们的 swap 函数。
  • 实现通用的 operator=。
  • 上面各个函数如果不抛异常的话,应当标为 noexcept。这对移动构造函数尤为重要。

相关文章

网友评论

      本文标题:C++ 的 左值,右值 和 移动构造函数

      本文链接:https://www.haomeiwen.com/subject/lvvpzktx.html