为什么只有模板才能返回右引用
C/C++ code
前者可以,后者提示无法将右值引用绑定在左值.但是都知道非常量的右值引用能够绑定到非常量 lvalue 以及非常量上
template<typename T> T&& move(T &&t){ return t; } int&& move_int(int &&a){ return a; }
前者可以,后者提示无法将右值引用绑定在左值.但是都知道非常量的右值引用能够绑定到非常量 lvalue 以及非常量上
作者: qfmyfeng 发布时间: 2011-06-15
还没研究0x
作者: downmooner 发布时间: 2011-06-15
我的vs2008第一个也不行。。。
作者: dizuo 发布时间: 2011-06-15
因为 a 在 move_int 里不是右值,所以无法绑定到右值引用,改成下面这样就行了。
C/C++ code
C/C++ code
int&& move_int(int &&a){ return std::move(a); }
作者: ri_aje 发布时间: 2011-06-15
vs2005也不行
作者: luciferisnotsatan 发布时间: 2011-06-15
在 VS2010 的结果是第一个也不行,你实例化一下模板就知道了。
VS2010 标准库里面的 move 是这么写的:
C/C++ code
强制转换了一下才返回,不知道为什么……
我也记得右值引用可以绑定到左值来着……
VS2010 标准库里面的 move 是这么写的:
C/C++ code
template<class _Ty> inline typename tr1::_Remove_reference<_Ty>::_Type&& move(_Ty&& _Arg) { // forward _Arg as movable return ((typename tr1::_Remove_reference<_Ty>::_Type&&)_Arg); }
强制转换了一下才返回,不知道为什么……
我也记得右值引用可以绑定到左值来着……
作者: hpsmouse 发布时间: 2011-06-15