返回值问题

mengde007 2008-04-05 09:39:33
关于返回值的存活期问题,我最近困了,请同志们帮忙,两个程序如下:
(一):#include<iostream>
using namespace std;
struct sysop
{
char name[20];
char quote[64];
int used;
};
const sysop & use (sysop & sysopref);//function with a reference return type
int main()
{
sysop looper={"rick \"fortran\"looper",
"i'm a goto kind of guy.",
0
};
use (looper);//looper is a type sysop
cout <<"looper :"<<looper.used<<"use(s)\n";
return 0;
}
//use ()returns the reference passed to it
const sysop & use(sysop & sysopref)
{
sysop newguy;
newguy=sysopref;
return newguy;
}
但是上述程序的use却不可用,原因是函数返回一个临时变量(newguy)的引用,函数运行完毕后,它将不复存在;请看(二):
#include<iostream>
using namespace std;
int value(int,int);
int main()
{
int a=3,b=4,c;
c=value(a,b);
cout<<c;
return 0;
}
int value(int a,int b)
{
c=a+b;
return c;
}
但是次程序却得到了结果,我想这两个程序都是在子函数中定义了一个数据,它们都是在调用后被释放了,为什一个可以得到返回值,而另一个却没有得到返回值呢?+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
...全文
108 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttkk_2007 2008-04-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cinanynames 的回复:]
引用 const sysop & use(sysop & sysopref)
{
sysop newguy;
newguy=sysopref;
return newguy;
}

sysopref是不是要改成const型的?期待高人解答。
[/Quote]
要不要改为const,看你要不要再函数里修改它,如果不修改,最好是const
Kratos 2008-04-05
  • 打赏
  • 举报
回复
晕,才看了几分钟竟然这么多人回答。
Kratos 2008-04-05
  • 打赏
  • 举报
回复
引用
const sysop & use(sysop & sysopref)
{
sysop newguy;
newguy=sysopref;
return newguy;
}


sysopref是不是要改成const型的?期待高人解答。
zywfriend 2008-04-05
  • 打赏
  • 举报
回复
上面返回是引用.下面返回的是值,解决办法,上面返回指针
ryfdizuo 2008-04-05
  • 打赏
  • 举报
回复
函数返回引用时,不能将临时变量返回,
可以改为全局,或静态变量;
ttkk_2007 2008-04-05
  • 打赏
  • 举报
回复
不一样啊,你第一个返回的是引用,第二个是按值返回
const sysop & use(sysop & sysopref)
{
sysop newguy;
newguy=sysopref;
return newguy;
}
=============================
newguy返回的时候销毁了,有返回引用,那么引用的就是一块无效内存

int value(int a,int b)
{
c=a+b;
return c;
}
=======================
这个是按值返回,返回的是c的拷贝, c=value(a,b); 然后再将临时变量拷贝给c

65,189

社区成员

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

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