问个返回结构的问题,谢谢、

summerYe 2010-05-24 09:35:48
#include<iostream>
using namespace std;
struct sysop
{
char name[26];
char quote[64];
int used;
};
sysop use(sysop sysopref);//将结构作为形参

int main()
{
sysop looper =
{
"Rick\"Fortran\"looper",
"I am goto kind of guy.",
0,
};
use(looper);
cout<<"Looper: "<<looper.used<<" use(s)\n";//输出0 use(s)
sysop copycat;
copycat = use(looper);
cout<<" looper: "<<looper.used<<" use(s)\n";//输出0 use(s)
cout<<"copy cat: "<<copycat.used<<" use(s)\n";//问1:输出1 use(s),这里不明白?
cout<<"use(looper): "<<use(looper).used<< "use(s)\n";//问2:输出1use(s),也不明白?
return 0;
}
sysop use(sysop sysopref)
{
cout<<sysopref.name<< "says:\n";
cout<<sysopref.quote<<endl;
sysopref.used++;
return sysopref;//问3:这里的sysopref是不是释放了,为什么上面的used还能变成1?
}

...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinjay 2010-05-24
  • 打赏
  • 举报
回复
对象做参数尽量传引用....当然,太大了就传指针吧
jaylong35 2010-05-24
  • 打赏
  • 举报
回复
sysopref是在返回完成之后才被释放的,
return 都在调用该函数的地方复制了返回的 sysopref结构体
所以
sysop copycat;
copycat = use(looper);
这句执行完成之后,函数已经将返回的复制的 sysopref结构体对象赋值给copycat了
所以cout<<"copy cat: "<<copycat.used<<" use(s)\n";这个输出的是1
同样,use(looper).used,事实上use(looper)就是函数复制结构体对像
所以cout<<"use(looper): "<<use(looper).used<< "use(s)\n“;输出1
俞庆平 2010-05-24
  • 打赏
  • 举报
回复
sysop use(sysop sysopref)
改成:
sysop use(sysop& sysopref)
fthislife 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 summerye 的回复:]
C/C++ code
#include<iostream>
using namespace std;
struct sysop
{
char name[26];
char quote[64];
int used;
};
sysop use(sysop sysopref);//将结构作为形参

int main()
{
sysop loop……
[/Quote]

在释放之前,已经进行了拷贝并反回了。
pengzhixi 2010-05-24
  • 打赏
  • 举报
回复
return sysopref;//编译器合成了一个拷贝构造函数,和赋值运算符,先用拷贝构造函数拷贝一个sysopref的临时对象,然后按位给copycat赋值。所以copycat.used输出1.
use(looper).used关于这个实际上是临时对象的used输出1也是正常
summerYe 2010-05-24
  • 打赏
  • 举报
回复
书上说可以将结构当形参使用,规则和普通类型是一样的。但这里的结构成员却变了,而如果是普通常量被释放的话应该不会改变,这是什么原因呢?

64,649

社区成员

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

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