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

tseny 2004-05-05 03:24:48
如函数
1.int fun()
2.string fun()
请解释一下?
是放在主存中还是寄存器中,特别讲一下返回对象时(如2. 虽不太常用到吧!?)
多谢!
...全文
66 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++的mfc框架的学生社团管理系统(源码+数据库+报告).zip 本系统实现的功能 本程序为单文档应用程序,主程序界面能实现查询社团信息、修改社团信息、删除社团信息、添加社团信息、入团、退团、用户登录、和用户管理功能其中修改社团信息、删除社团信息、添加社团信息和用户管理需要用户登录后才能使用,未登录就点击使用的会会弹出对话框显示您还没有登录,点击登录按钮会弹出用户登录对话框输入正确的用户名称和密码若验证成功则会显示登录成功并显示出您用有的权限高级管理员或者是普通管理员,高级管理员则可以对社团信息进行修改、删除、添加。点击入团按钮会弹出加入社团对话框,对话框内填上相应的信息后点击确定成功加入后会有相关提示,若没有成功则有可能您输入的社团不存,点击退团按钮弹出退出社团对话框,输入您要退出的社团名称和学号点击确定如果成功退出会显示成功的标志,否则的话就是您没有假如该社团活着您填的信息不完全。主程序对话框中可以直接控件内输入要修改的社团信息,然后点击修改按钮,分别输入控件中的内容然后点击添加按钮,若要添加的社团当前没有的话则添加成功,否则会失败。登录了以后点击用户管理按钮则会弹出用户管理对话框,该对话框内可以修改用户密码,高级管理员还能注册新用户。
发帖
C++ 语言
加入

6.1w+

社区成员

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