什么是差异remove_reference或没有它

时间:2014-04-16 06:10:42

标签: c++ rvalue

我写了一个简单的函数,返回对象右值引用。但它不能正常工作。但是如果我使用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);
    }

1 个答案:

答案 0 :(得分:1)

mymove中的内容是通用引用 - 而非rvalue。

参考规则崩溃是这样的:

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

如果你将左值传递给mymove,你将得到左值作为参数和返回类型。这就是为什么您的mymove的工作方式与std::move的工作方式不同。

相关问题