gpt4 book ai didi

c++ - 有什么区别 remove_reference 或没有它

转载 作者:行者123 更新时间:2023-11-28 06:56:34 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com