what the fuck

booirror 2015-04-09 03:46:41

struct A{
A(int a): b(a) {}

A& getLR() { return *this;}//1
A getVal() {return *this;}//2
int b;
};

第二个函数返回的是右值,为什么第一个函数返回的却是左值。

同样都是return *this,为什么返回的结果不一样?为为为为为什么
...全文
144 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mewiteor 2015-04-09
  • 打赏
  • 举报
回复
第二个方法返回时会调用一次拷贝构造函数,返回的就是一个临时值,之后这个临时值自己会析构,对临时值的操作不会影响到原值。 第一个方法返回引用,是按址传递的,不会调用拷贝构造函数,这时对返回值的操作会影响到原值。 这两个方法返回值不同就是为了实现其不同的目的。
booirror 2015-04-09
  • 打赏
  • 举报
回复
引用 6 楼 vcf_reader 的回复:
语言就是这么定义的
那也得有个原因吧,总不能瞎定义
vcf_reader 2015-04-09
  • 打赏
  • 举报
回复
语言就是这么定义的
jiht594 2015-04-09
  • 打赏
  • 举报
回复
引用 4 楼 jiht594 的回复:
[quote=引用 3 楼 booirror 的回复:] [quote=引用 2 楼 geochway 的回复:] 语法就是这么规定的,第一函数的返回类型是引用类型 A&, 因此返回值不是一个副本,而是引用对象的自身。 因此可以这样使用: getLR()=.... 而后者返回的是临时值。
"返回类型是引用类型 A&“ 我觉得可以返回A&类型的临时值啊,比如右值引用返回的就是临时值。[/quote] l临时之是要销毁的. 你想把A也销毁吗? 右值引用也不是临时值[/quote] 右值引用move出来就是左值. 没move是右值. 如果说错了, 来人纠正啊
jiht594 2015-04-09
  • 打赏
  • 举报
回复
引用 3 楼 booirror 的回复:
[quote=引用 2 楼 geochway 的回复:] 语法就是这么规定的,第一函数的返回类型是引用类型 A&, 因此返回值不是一个副本,而是引用对象的自身。 因此可以这样使用: getLR()=.... 而后者返回的是临时值。
"返回类型是引用类型 A&“ 我觉得可以返回A&类型的临时值啊,比如右值引用返回的就是临时值。[/quote] l临时之是要销毁的. 你想把A也销毁吗? 右值引用也不是临时值
booirror 2015-04-09
  • 打赏
  • 举报
回复
引用 2 楼 geochway 的回复:
语法就是这么规定的,第一函数的返回类型是引用类型 A&, 因此返回值不是一个副本,而是引用对象的自身。 因此可以这样使用: getLR()=.... 而后者返回的是临时值。
"返回类型是引用类型 A&“ 我觉得可以返回A&类型的临时值啊,比如右值引用返回的就是临时值。
geochway 2015-04-09
  • 打赏
  • 举报
回复
语法就是这么规定的,第一函数的返回类型是引用类型 A&, 因此返回值不是一个副本,而是引用对象的自身。 因此可以这样使用: getLR()=.... 而后者返回的是临时值。
geochway 2015-04-09
  • 打赏
  • 举报
回复
语法就是这么规定的,第一函数的返回类型是引用类型 A&, 因此返回值不是一个副本,而是引用对象的自身。 因此可以这样使用: getLR()=.... 而后者返回是

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧