c++函数返回引用的问题

larrynn 2007-06-16 01:59:54
问题1: 函数 int &back(int &i)
{
int ret=i;
return ret:
}
可以正确返回所引用的实蚕参的值,那么ret是不是从int转换成引用类型了?
问题2: 上面那个函数可以正确编译返回但是这个(c++primer edition 4中的一个例子):
string &back(string &i)
{
string ret=i;
return ret;
}
就是编译错误,reference to a local variable or object。
能不能 详细的解释一下这个例子,不明白为什么返回的是局部对象的引用!
...全文
1777 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
digu 2007-06-16
  • 打赏
  • 举报
回复
函数返回值(int Func1())时,要产生一个临时变量作为函数返回值的副本(保存该函数调用中要返回的值),而用引用返回值(int &Func2())时,不产生值的副本。故在用函数返回值定义一个引用(int &ia = Func1())时,该引用为临时变量的引用,由于临时变量作用域短暂,故该引用存在随时无效的危险。而用引用返回值时,由于不产生值的副本,故int &i = func2();在func2()的返回值是一个静态或者全局变量的情况下的调用是合法可行的,其直接用全局数据区中的变量来初始化引用y,当然如果Func2中的返回值是局部变量,那么当然是非法的。

不妨自己再分析一下下面的四种函数调用:
int Func1();
int &Func2();
int &i = Func2();
int &ia = Func1();
int ib = Func1();
int ic = Func2();
记得这好像是钱能的那本C++教程里面的题目,应该没有记错。
larrynn 2007-06-16
  • 打赏
  • 举报
回复
那么对于返回引用的函数里 return X 无论 X 是什么(包括X已经是个引用), 都要return一个对 X 的引用,是这样吧?
uzone 2007-06-16
  • 打赏
  • 举报
回复
局部变量的空间在函数调用就释放空间了

就不能返回引用了
chenyu2202863 2007-06-16
  • 打赏
  • 举报
回复

int ret=i;
这里ret是一个局部变量,在该函数结束的时候要"消失",也就是出栈.当你返回它的引用时,它都不存在了,还引用什么?

string是一个类,
string ret=i;调用了拷贝构造函数,其他的道理也就和上面一样

总之,都是错误的

33,322

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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