社区
C++ 语言
帖子详情
为什么左值可以传给右值引用
booirror
2015-04-05 02:49:48
template<class T>
func(T&& t)
{
....
}
然后如下调用:
int a = 4;
func(a);
非常ok,不报错,我真是纳闷,这是为什么
...全文
414
6
打赏
收藏
为什么左值可以传给右值引用
template func(T&& t) { .... } 然后如下调用: int a = 4; func(a); 非常ok,不报错,我真是纳闷,这是为什么
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
哈利_蜘蛛侠
2015-04-06
打赏
举报
回复
你可以这么理解:如果不能将变量a直接作为你那个函数的实参的话,那么为了成功地调用那个函数,你就要生生地造出一个右值表达式,比如说a+0,而这显然是不方便的。所以int&& 是兼容int&的参数的。 当然,如果你另外定义了一个以int&为形参的重载函数的话,用a做实参时,就会调用int&为形参的重载函数版本了。
jiht594
2015-04-05
打赏
举报
回复
引用 4 楼 booirror 的回复:
[quote=引用 1 楼 jiht594 的回复:] 你哪里看到不能用左值的?
因为左值不能赋值给右值引用类型的变量[/quote] 这里有一个推导的过程. 看一下2楼连接, 4.3 模板参数类型推导 这节
booirror
2015-04-05
打赏
举报
回复
引用 1 楼 jiht594 的回复:
你哪里看到不能用左值的?
因为左值不能赋值给右值引用类型的变量
ri_aje
2015-04-05
打赏
举报
回复
这是为了照顾 perfect forwarding,最后推倒的类型是 int&,能够成功绑定。
jiht594
2015-04-05
打赏
举报
回复
http://zh.wikipedia.org/wiki/右值引用#.E5.BC.95.E7.94.A8.E5.A1.8C.E7.BC.A9.E8.A7.84.E5.88.99 4.2 引用塌缩规则 4.3
模板参数类型推导
4.4 完美转发的解决方案 6 右值引用的类型推导 6.1 auto关键字的类型完美转发 6.2 typedef的类型推导 6.3 decltype类型推导
jiht594
2015-04-05
打赏
举报
回复
你哪里看到不能用左值的?
【C++进阶】
左值
、右值、
右值引用
本文介绍了C++中的
左值
和
右值引用
,
左值
引用用于已命名的变量,而
右值引用
则用于匿名变量。通过示例展示了
右值引用
的使用,包括如何通过std::move创建右值。同时,讨论了
右值引用
在函数参数传递中的应用,强调了不能直接将
左值
传给
需要
右值引用
的函数,但可以通过std::move转换。最后,提及
右值引用
在优化资源管理,如移动语义中的关键作用。
move和forward关键字
博客介绍了两个重要功能,move可将
左值
改成
右值引用
,forward能把原来的值原封不动地
传给
下一个值,这些内容在信息技术编程领域有重要应用。
关于c++引用(函数实参和形参)
本文探讨了C++中
左值
引用与右值的概念及其应用。重点分析了函数调用过程中,当形参为
左值
引用时,实参如何正确传递的问题。并通过实例说明了右值不能直接传递给需要
左值
的引用参数的原因。
c++
左值
和
右值引用
本文深入探讨了
左值
和右值的概念,解释了它们在C++中的作用和区别,包括值语义和引用语义,
左值
引用和
右值引用
的用法,以及如何通过std::move实现移动语义,优化大型动态结构的内存使用。
常量
左值
引用作为形参来接收
右值引用
实参所带来的问题
文章讲述了如何在编程中,当使用常量
左值
引用形参接收
右值引用
实参时,可能导致性能下降和错误行为。通过实例解释了移动语义的丧失,并提出使用完美转发和
右值引用
形参来解决这一问题。
C++ 语言
65,213
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章