关于函数返回值的问题!(它到底存储在哪?)

tseny 2004-05-05 03:24:48
如函数
1.int fun()
2.string fun()
请解释一下?
是放在主存中还是寄存器中,特别讲一下返回对象时(如2. 虽不太常用到吧!?)
多谢!
...全文
108 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
积木 2004-05-06
  • 打赏
  • 举报
回复
2.string fun()
这个东西很有趣,在C++中通常将其处理为
fun(string& __result)
调用的时候例如
string str = fun();
就可能变成
string __temp;
fun(__temp);
str(__temp);
所以说这种调用会产生一个临时对象的。
Wolf0403 2004-05-06
  • 打赏
  • 举报
回复
三井:最后一句应该是“所以说这种调用不会产生一个临时对象的。”
吧。。。

如果
string fun()
{
return string("Hello");
}
编译器几乎都会优化掉这个 string 匿名对象而变成三井所说的形式。
但是

string fun()
{
string rt("Hello");
// ... more operations here
return rt;
}
很多时候也许就不会优化了。

Dev-C++ 和 VC debug 模式似乎是这样子的:只能优化匿名对象。
02051223 2004-05-06
  • 打赏
  • 举报
回复
楼上的见解很深呀!

平时只是考虑他是放在栈中就没有多想了!

看了你的帖子后又学到了一招。

哈哈
playmud 2004-05-05
  • 打赏
  • 举报
回复
问:ra3(可乐)
生命结束指的是什么?
vcchunhong 2004-05-05
  • 打赏
  • 举报
回复
反汇编 不懂看~呵~
lxh1010 2004-05-05
  • 打赏
  • 举报
回复
放在栈中,反汇编就可以看到
xiaozhong 2004-05-05
  • 打赏
  • 举报
回复
应该是防在栈里面
ra3 2004-05-05
  • 打赏
  • 举报
回复
放栈内存中;

会新建一个 string 对象放在栈内存中, 比如
string str = fun();
这一行调用完成后 str 的生命结束。
HashCodeWithJava 2004-05-05
  • 打赏
  • 举报
回复
有的是存在堆栈里面.不过我看了有很多标准的C代码是存放在ax寄存器的.

你可以在visual C++里面按反汇编代码,查看一下函数的汇编代码就清楚了!
FoxMale007 2004-05-05
  • 打赏
  • 举报
回复
MAIN函数也是函数
函数返回值是放在堆栈里的啊
ghiewa 2004-05-05
  • 打赏
  • 举报
回复
呵 又学到一手
Iforgot 2004-05-05
  • 打赏
  • 举报
回复
好像C++不能返回对象,除非该对象是函数外面创建的(这时返回就没意义了)。

你可以自己在某个函数里创建对象,返回,然后看看结果。对象肯定是没了的。


在C++里,对象的生命周期为函数执行域,函数退出时,对象也销毁了。
julyclyde 2004-05-05
  • 打赏
  • 举报
回复
是应该在AX的
汇编时代的约定

65,189

社区成员

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

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