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

tseny 2004-05-05 03:24:48
如函数
1.int fun()
2.string fun()
请解释一下?
是放在主存中还是寄存器中,特别讲一下返回对象时(如2. 虽不太常用到吧!?)
多谢!
...全文
55 13 点赞 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
积木 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++里面按反汇编代码,查看一下函数的汇编代码就清楚了!
  • 打赏
  • 举报
回复
applebomb 2004-05-05
MAIN函数也是函数
函数返回值是放在堆栈里的啊
  • 打赏
  • 举报
回复
ghiewa 2004-05-05
呵 又学到一手
  • 打赏
  • 举报
回复
Iforgot 2004-05-05
好像C++不能返回对象,除非该对象是函数外面创建的(这时返回就没意义了)。

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


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

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2004-05-05 03:24
社区公告
暂无公告