为了账号安全,请及时绑定邮箱和手机立即绑定

如果写成 return s 和 return ret 一样吗?

如果写成 return s 和 return ret 一样吗?

C C++
神不在的星期二 2022-09-15 18:14:12
在 不能返回局部对象的引用 这个小节中有如下例子:const string &manip(const string& s){ string ret =s;return ret;}C++primer 上说这个程序会在运行是出错,因为返回了局部对象的引用。问题:为什么 ret 是引用呢?如果ret是引用的话,那么不是应该 写成 string &ret=s 么?
查看完整描述

4 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

函数定义的返回类型是const string&,ret是函数体内定义的string对象属于局部变量,根据函数定义可知在函数最后需要返回ret的const string引用,然而局部变量的作用域仅仅是函数体内,所以它的引用不会返回。

查看完整回答
反对 回复 2022-09-21
?
心有法竹

TA贡献1866条经验 获得超5个赞

看原型:
const string &manip(const string& s)

返回类型是 const string &
那么
return ret; 时不会返回ret的副本,而是返回ret本身,也就是ret的引用

如原型的返回类型是 const string ,那么 return ret 返回的就是ret的副本了
返回值还是引用取决于函数的返回值是如何定义的 ,因为返回值和返回引用的写法是完全一样的,所以只能从函数定义时的返回类型确定

查看完整回答
反对 回复 2022-09-21
?
POPMUISE

TA贡献1765条经验 获得超5个赞

1. C++PRIMER说的对, 返回了局部变量的引用,子程序结束时,这个栈中变量已释放;
2. 引用的概念较难理解,平时除了 函数参数的引用传递外,一般不用;引用的本质就是
用地址表示这个变量;
3. 这个函数返回“引用”,并不是说 ret 是 “引用”,所以,你的最后说法是错误的。
4. 函数返回“引用”的古怪用法是当“左值”,如: manip(s)="123"; 怪吧。

查看完整回答
反对 回复 2022-09-21
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

ret是局部变量
函数的返回值是个引用 const string&
局部变量在函数结束的时候会自动析构,所以返回的引用地址实际是个错误的地址

查看完整回答
反对 回复 2022-09-21
  • 4 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信