为什么std::move使用std::remove_reference来实现?

13
我对std::move函数的理解不是很好。
template <class T>
typename remove_reference<T>::type&&
move(T&& a)
{
    return a;
}

为什么要移除引用(remove_reference)? 有人能给我一个简单的解释吗?
2个回答

18

考虑一下如果T是左值引用,例如MyClass &会发生什么。在这种情况下,T &&将变成MyClass & &&,由于引用折叠规则,这将再次转换为MyClass &。为了实现正确的结果,typename remove_reference<MyClass&>::type&&首先从类型中删除任何引用修饰符,因此MyClass &被映射到MyClass,然后应用右值引用,产生MyClass &&


是的,那完全正确,但显然有人持不同意见 :) - Šimon Tóth
嗯,我在你之前10分钟写了同样的东西,结果被踩了。 - Šimon Tóth
1
@Let:嗯,我猜你的解释对于不熟悉右值引用的人来说可能有点简洁,不知道…… - fredoverflow
对于不熟悉这个主题的人来说,下投票反对一个答案有些奇怪。我并不在意,只是想指出有人不同意这个解释。 - Šimon Tóth

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接