0%

move

std::move执行到右值的无条件的转换,但就自身而言,它不移动任何东西

内部的实现类似这样:

1
2
3
4
5
6
template<typename T>
typename remove_reference<T>::type&& move(T&& param)
{
using ReturnType = typename remove_reference<T>::type&&;
return static_cast<ReturnType>(param);
}
  1. remove_reference<T>::typeT去除引用
  2. using ReturnType = typename remove_reference<T>::type&&,使得ReturnType是一个右值引用
  3. static_cast<ReturnType>(param) 将param转化为右值引用

类似使用C++14版本更简单:

1
2
3
4
5
6
template<typename T>
decltype(auto) move(T&& param) //C++14,仍然在std命名空间
{
using ReturnType = remove_referece_t<T>&&;
return static_cast<ReturnType>(param);
}