方法:
- std::move,move是强制将左值转换成右值(移动语义),以前经常有函数套函数的调用,那个其实是将右值(函数返回值是一个const右值),在函数体内,转换成了一个临时实参(左值)。
- 这种临时变量的方式在有类作为参数的情况下,会非常麻烦,因为类一般都很大,如果先将右值拷贝到临时变量,然后再在函数中,再拷贝到新的类变量中,其实中间做了一次无意义的拷贝(比如以前拷贝构造函数的实现),流程是将内容从右值(寄存器),先拷贝到内存中的一个临时变量(tmp,可以获取到临时变量地址的),然后再讲临时变量放到寄存器,再拷贝到真正需要拷贝的变量中,效率其实是非常低的。为何不能函数一开始传入的就是一个右值引用(注意是引用,而不是右值)(寄存器变量),直接一次性拷贝到内存中呢?所以,就有了右值引用的拷贝(称为移动拷贝),即将内存先移动到寄存器,直接传入,再移动到真正需要的变量中。std::move就是将左值转换成右值的一种函数(将内存转换到寄存器的一种移动),其实只是转换左右值属性。好处就是提升性能,被move的内存变量可以直接删除(内容相当于移动到寄存器了)