永发信息网

C++返回引用的函数作为左值,大神过来看看。

答案:4  悬赏:0  手机版
解决时间 2021-02-24 13:24
  • 提问者网友:几叶到寒
  • 2021-02-23 17:13
C++返回引用的函数作为左值,大神过来看看。
最佳答案
  • 五星知识达人网友:鱼芗
  • 2021-02-23 18:03
函数是被执行过的,只不过引用对象消失了。
返回的int&是一个引用,在comp()里面,这个引用指向了p1.bonus和p2.bonus。可是p1和p2在这个comp()是局部变量,出了comp()函数p1和p2就不存在了。所以返回的int&所指向的数据也就不存在了。
修改的方法:把函数参数改成引用型: int& comp(person &p1, person &p2)
这样,comp()函数中使用的p1,p2就是main()函数中的p1和p2了。
离开了comp(),p1,p2不会消失,comp()的返回值int&指向的数据还能存在。
全部回答
  • 1楼网友:一把行者刀
  • 2021-02-23 21:10
你调用comp的时候传进去的p1和p2被复制了一份,已经不是你原来的p1,p2了,所以你修改的也不是main里面的p1,p2
  • 2楼网友:青尢
  • 2021-02-23 21:05
楼主你把int&comp(person p1,person p2)
改成 int&comp(person& p1,person &p2)试试
  • 3楼网友:舍身薄凉客
  • 2021-02-23 19:36
函数返回后,其局部变量就不能再使用,返回引用,但指向的变量已可能被覆盖。虽然你comp中的p1, p2只是一个副本,并不是main函数p1,p2的引用。所以是局部变量。这情况类似于返回局部变量的地址。编译器会报警
comp(p1,p2)=1; 函数名可以作为左值吗?追问函数作为左值不是返回引用可以做到么?这不是引用的一大功能吗?追答嗯,玩C多了,不习惯了,这个不是重点,主要我说的第一个问题:
你把comp的p1, p2也用引用就不会出现局部变量的问题了。
comp(person &p1, person &p2)
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯