我写了一个简单的函数,返回对象右值引用。但是它不能正常工作。但是如果我使用std :: move它的工作,我看到的唯一区别是remove_reference还是什么?还是我对右值的转换是错误的?

template<class T>
T&& mymove(T &&obj)
{
    return (T&&)obj;
}




template<class _Ty> inline
    typename remove_reference<_Ty>::type&&
        move(_Ty&& _Arg) _NOEXCEPT
    {   // forward _Arg as movable
    return ((typename remove_reference<_Ty>::type&&)_Arg);
    }

最佳答案

您在mymove中得到的是通用参考-不是右值。

参考折叠的规则是这样的:

T&& -> T&&
T&& & -> T&
T& && -> T&
T&& && -> T&&


如果将左值传递给mymove,则将同时获得左值作为参数和返回类型。这就是为什么您的mymove不能以与std::move相同的方式工作的原因。

关于c++ - 有什么区别remove_reference或没有它,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23101346/

10-15 00:28