std::move是如何定义的
标准库是这样定义move的:
// 在返回类型和类型转换中也要用到typename
template <typename T>
typename remove_reference<T>::type&& move(T&& t)
{
return static_cast<typename remove_reference<T>::type&&>(t);
}
从一个左值static_cast到一个右值引用是允许的
通常情况下,static_cast只能用于其他合法的类型转换,但是,这里又有一条针对右值引用的特许规则:虽然不能隐式地将一个左值转换为右值引用,但我们可以用static_cast显式地将一个左值转换为一个右值引用。
对于操作右值引用的代码来说,将一个右值引用绑定到一个左值的特性允许它们截断左值。