此问题已在此处有答案:
How does std::move convert expressions to rvalues?(2个答案)
关闭7天前。
我不太明白std::move
函数
template <class T>
typename remove_reference<T>::type&&
move(T&& a)
{
return a;
}
为什么是remove_reference
?有没有人给予简单解释一下?
此问题已在此处有答案:
How does std::move convert expressions to rvalues?(2个答案)
关闭7天前。
我不太明白std::move
函数
template <class T>
typename remove_reference<T>::type&&
move(T&& a)
{
return a;
}
为什么是remove_reference
?有没有人给予简单解释一下?
2条答案
按热度按时间wwtsj6pe1#
想想如果
T
是一个左值引用会发生什么,例如MyClass &
。在这种情况下,T &&
将变成MyClass & &&
,由于 * 引用折叠规则 *,这将再次转换为MyClass &
。为了获得正确的结果,typename remove_reference<MyClass&>::type&&
首先从类型中删除任何引用修饰,因此MyClass &
被Map到MyClass
,然后对它应用右值引用,产生MyClass &&
。qv7cva1a2#
因为右值引用到左值引用会衰减为左值引用,并且返回左值引用的语义与
move
的语义不同。编辑:嗯,为什么要投反对票?看看这个代码:
进一步阅读:http://www.justsoftwaresolutions.co.uk/cplusplus/rvalue_references_and_perfect_forwarding.html