在 不能返回局部对象的引用 这个小节中有如下例子: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引用,然而局部变量的作用域仅仅是函数体内,所以它的引用不会返回。
心有法竹
TA贡献1866条经验 获得超5个赞
看原型:
const string &manip(const string& s)
返回类型是 const string &
那么
return ret; 时不会返回ret的副本,而是返回ret本身,也就是ret的引用
如原型的返回类型是 const string ,那么 return ret 返回的就是ret的副本了
返回值还是引用取决于函数的返回值是如何定义的 ,因为返回值和返回引用的写法是完全一样的,所以只能从函数定义时的返回类型确定
POPMUISE
TA贡献1765条经验 获得超5个赞
1. C++PRIMER说的对, 返回了局部变量的引用,子程序结束时,这个栈中变量已释放;
2. 引用的概念较难理解,平时除了 函数参数的引用传递外,一般不用;引用的本质就是
用地址表示这个变量;
3. 这个函数返回“引用”,并不是说 ret 是 “引用”,所以,你的最后说法是错误的。
4. 函数返回“引用”的古怪用法是当“左值”,如: manip(s)="123"; 怪吧。
- 4 回答
- 0 关注
- 108 浏览
添加回答
举报
0/150
提交
取消