关于函数返回值存放的问题

fendouzhe 2010-06-17 12:42:03
如果一个函数如下:
string fun();
如果在调用该函数的时候并没有用变量接受其返回值,那么它的返回值将存放在哪儿?是建立一个常量的临时变量来存储么?
...全文
165 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
机智的呆呆 2010-06-17
  • 打赏
  • 举报
回复
如果是返回是整形或者字节比较少的对象,那么返回值放入寄存器中~~像vc 整形放入eax~~
如果对象比较大那么,会在栈上分配一个空间,返回值放在栈上~~
ForestDB 2010-06-17
  • 打赏
  • 举报
回复
个人理解,一般放eax(原始类型的值或者对象引用)。
比如
int foo()
{
return 0;
}
在返回的时候mov eax, 0(多半是xor eax, eax),
如果这样调用
int i = foo();
那么随后就会有mov i, eax(仅演示作用,非正确的汇编码),
如果
foo();
那么这个eax的值就被“丢弃”了,没有用到;
又如
string bar()
{
string s = "hello";
return s;
}
同理在返回的时候会将s引用放进eax,
那么
string s = bar();
就会以eax(即引用)调用copy-constructor,
当然如果只调用
bar();
那么这个引用就被“丢弃”了,因为没有用到。

上面只是一般性的理解,建议debug,同时去找点资料看看,得到精准的定义。
乃不知有汉 2010-06-17
  • 打赏
  • 举报
回复
这在你生成 release 版的时候
会根据需要进行优化
如果没引用 根本不会有这个变量生成,会被完全优化掉
详细请参考 返回值优化
zhangweiit 2010-06-17
  • 打赏
  • 举报
回复
返回值会被放置,但是,没有被引用而已
healer_kx 2010-06-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 pengzhixi 的回复:]

不想深究这个了,曾经和飞雪讨论过,有所收获但是发现意义不大
[/Quote]

嗯,是啊。不过有收获就好,意义大不大的,要看能不能遇到问题。~
pengzhixi 2010-06-17
  • 打赏
  • 举报
回复
不想深究这个了,曾经和飞雪讨论过,有所收获但是发现意义不大
healer_kx 2010-06-17
  • 打赏
  • 举报
回复
从编译器的实现上看,楼上说的挺好的,无非是利用寄存器和栈了。

64,690

社区成员

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

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