std::move
C++11引入了名为move的库函数,该函数可以获得绑定到左值上的右值引用,定义在头文件<utility>中。
该函数的定义如下:
template <typename T>
typename remove_reference<T>::type&& move(T&& t)
{
return static_cast<typename remove_reference<T>::type&&>(t);
}
由代码可以看出,move是一个模板函数,模板函数的模板参数由编译器根据函数实参来进行推导,因此接下来我们从不同类型函数参数来推断一下模板函数的实例化结果。
1、实参为左值
int i = 0;
std::move(i);
可知,传递给move的实参是一个左值,因此推断出T的类型为 int&,模板函数实例化为
remove_reference<int&>::type&& move(int& && t)
{
return static_cast<remo