右值引用的参数传递疑问(C++0x) 20

c++0x增加了右值引用,有些疑问比如:template<classT>T&&move(T&&t)//typenamestd::remove_reference<T>::... c++0x增加了右值引用,有些疑问
比如:
template< class T >
T&& move( T&& t ) // typename std::remove_reference<T>::type
{
return t;
}
template <class T> swap(T& a, T& b)
{
T tmp(std::move(a));
a = std::move(b);
b = std::move(tmp);
}

问:
1、右值引用变量初始化的时候,只能是右值(表达式),但是move函数的参数也声明T&& t,确可以接受左值(引用)和右值,[color=#FF0000]如果实参是左值传入[/color],t是怎样完成初始化的过程?

2、还有move返回的是右值引用,
int a = move(5); 与 int&& a = move(5); 有什么区别?

请高手指点下关于右值引用的本质。
展开
 我来答
vbtraz
2009-11-02 · TA获得超过5532个赞
知道大有可为答主
回答量:4152
采纳率:0%
帮助的人:4465万
展开全部
讨论这种还没有具体实现的语法意义不大。。

我的感觉是右值引用相当于以前经常写的 const T & t ,解决一个临时变量的引用问题, 效率可能会高一些。

1. 右值引用并不是只能指定成右值, 否则一个函数你只能用临时变量调用它,这行为未免太不可理喻了。 引用又叫别名, 他就是同一个东西的另一个名字, 所以没有“初始化”的问题, 这个东西的初始化在它的别名出现之前就已经结束了。

2. int a = move(5) 这里move返回的是一个引用还是一个值都无所谓了, 因为a本身是个对象实体,所以这里的初始化是拷贝的。
int && a = move(5)这里就分两种情况, 如果move返回的是一个引用, 那么a同样是一个引用, 引用的是同一个东西。 如果move返回的是一个临时变量(按值返回), 这里a就是引用那个返回值, 相当于是给返回值一个名字。

因为没有具体用过这个语法,上面说的就是根据之前看到的介绍的理解。 尤其是左值引用跟右值引用的具体差别部分还不清楚, 也没兴趣查文档, 还是等用到了再说吧
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
ahaubit
2009-11-02 · TA获得超过1453个赞
知道小有建树答主
回答量:637
采纳率:0%
帮助的人:777万
展开全部
右值引用,mark
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式