C++11语法——std::move()

发布时间 2023-11-05 17:32:54作者: vLiion

std::move()


在C++中,std::move() 用于将对象转换为右值引用。



关于左值、左值引用、右值、右值引用

左值是一个表示数据的表达式(比如变量名或者解引用的指针),程序可以获取其地址
传统的C++引用,即是左值引用。

C++11新增右值引用,用 && 表示。
右值是可出现在赋值表达式的右边,但不能对其应用地址运算符的值(比如字面常量、像x+y的表达式以及返回值的函数前提是该函数返回的不是引用
出现了右值引用,就可以用右值引用可关联到右值了



move操作

在C++中,move操作是一种将对象的所有权从一个对象转移到另一个对象的机制,它允许我们避免不必要的拷贝操作,从而提高程序的性能。

在C++11中,标准库提供了一个非常有用的函数 std::move(),它可以将一个左值强制转换为右值引用。具体来说,std::move() 函数将一个左值强制转换为右值引用,并返回一个指向该右值引用的指针。这个指针可以被传递给其他函数,以实现移动语义。

std::move() 调用之后,原左值对象仍然存在,但你不能再假定它包含以前的值。在技术上,该对象仍然是可用的,但只有 销毁 和 赋值 操作可以安全使用。所以为了使源对象不能再被操作,需要将源对象的指针或资源设置为一个无效或空的状态,从而确保源对象的析构函数不会对这些资源进行操作,比如为指针设置为 nullptr