简介
std::move无条件的将实参转为右值,从而实现资源的移动,故称为“移动语义”
底层实现(简化版):
template<typename T>
typename remove_reference<T>::type&& move(T&& param){
using ReturnType = typename remove_reference<T>::type&&;
return static_cast<ReturnType>(param);
}
上述代码返回类型中有&&,根据引用折叠原理,T是右值就返回右值,T是左值就返回左值,
为了保证转为右值,先用remove_reference去掉引用类型,然后用static_cast返回改类型的右值引用即可。
应用:
要改变资源的所有权时,需要用到移动语义。
- 一些不能共享的资源(如IO类、unique_ptr)只支持移动,不支持拷贝。
- 移动的效率比复制更高。