社区
C++ 语言
帖子详情
为什么左值可以传给右值引用
booirror
2015-04-05 02:49:48
template<class T>
func(T&& t)
{
....
}
然后如下调用:
int a = 4;
func(a);
非常ok,不报错,我真是纳闷,这是为什么
...全文
354
6
打赏
收藏
为什么左值可以传给右值引用
template func(T&& t) { .... } 然后如下调用: int a = 4; func(a); 非常ok,不报错,我真是纳闷,这是为什么
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
你哪里看到不能用左值的?
31_c++中的
左值
引用与
右值引用
1
但是,一旦一个
左值
被`std::move`转换为
右值引用
,原
左值
对象的状态变得不确定,不应再直接使用,以防止意外的副作用。 总结来说,
左值
引用和
右值引用
是C++中用来处理对象引用的两种方式。
左值
引用用于常规的引用和...
浅谈C++
左值
引用和
右值引用
但是,
右值引用
不能直接绑定到
左值
,除非通过`std::move`函数,该函数可以将
左值
转换为对应的
右值引用
类型,如`int &&r6 = std::move(r2);`。
左值
引用和
右值引用
的一个关键区别在于,
左值
引用通常表示对象的身份,...
左值
与右值的引用
这是关于C++
左值
与
右值引用
的课程视频,课程易于理解,可以很快掌握
非常量引用的初始值必须为
左值
的问题
右值引用
使得我们可以区分临时对象和常规变量,并且允许修改这些临时对象。这对于提高性能和减少不必要的复制操作非常重要。 - **示例**: ```cpp struct S { S(S &&other) { ... } // 移动构造函数 }; S s1,...
深入理解c++
右值引用
1
右值引用
可以被视为指向右值的引用,这使得我们能够更加有效地利用临时对象,并允许将资源从一个对象“移动”到另一个对象,而不仅仅是复制。 首先,我们要了解
左值
和右值的概念。
左值
(lvalue)是指可以被赋值、...
C++ 语言
65,187
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章