免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1549 | 回复: 7
打印 上一主题 下一主题

[函数] 问个关于函数参数的问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-29 10:34 |只看该作者 |倒序浏览
比如有个函数如下定义:
int fun(int a)
{
  。。。。。。。
}

想问一下形参a有分配空间吗?

论坛徽章:
0
2 [报告]
发表于 2005-10-29 10:37 |只看该作者

问个关于函数参数的问题?

论坛徽章:
0
3 [报告]
发表于 2005-10-29 10:40 |只看该作者

问个关于函数参数的问题?

可能在栈上,也可能在寄存器上,只要不是变态递归,有没有分配空间该没什么影响

论坛徽章:
0
4 [报告]
发表于 2005-10-29 10:50 |只看该作者

问个关于函数参数的问题?

一般都在栈上,调用函数时,首先把实参拷贝一份到形参的空间,即PUSH a

论坛徽章:
0
5 [报告]
发表于 2005-10-29 10:51 |只看该作者

问个关于函数参数的问题?

《C++程序设计语言》11.7节有这么个例子:
string g(string arg)
{
    return arg;
}

int main()
{
    string s = "Newton";
    s = g(s);
}

后面有段解释:“在调用g()之后s的值应该是Newton。取得s的值的一个副本给参数arg并不困难,调用string的复制(拷贝)构造函数就能完成这件事情。要取得这个值的另一个副本送出g(),则需要再次调用string(const string &,这次被初始化的变量是一个临时对象,而后将用它给s赋值。在这两次复制中常常有一个能够通过优化去掉,不可能两个都去掉。”

想问的是为什么返回值还需要调用复制(拷贝)构造函数,为什么不可以用开始传进去的那个副本?

论坛徽章:
0
6 [报告]
发表于 2005-10-29 11:04 |只看该作者

问个关于函数参数的问题?

不懂c++,不过应该涉及到深度复制的问题...

论坛徽章:
0
7 [报告]
发表于 2005-10-29 13:45 |只看该作者

问个关于函数参数的问题?

如果用引用就使用原来变量,不是拷贝。

论坛徽章:
0
8 [报告]
发表于 2005-10-29 21:19 |只看该作者

问个关于函数参数的问题?

>;>; 为什么返回值还需要调用复制(拷贝)构造函数

调用拷贝构造函数是为了完成将 arg 对象拷贝给作为函数返回值的临时对象。

>;>; 为什么不可以用开始传进去的那个副本?

因为这个副本(arg)在函数结束之后就被释放了,不能再被使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP