| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 669 人关注过本帖
标题:关于“引用”在内使用上的问题
只看楼主 加入收藏
gujunpu
Rank: 1
等 级:新手上路
帖 子:23
专家分:3
注 册:2012-2-25
结帖率:60%
收藏
 问题点数:0 回复次数:4 
关于“引用”在内使用上的问题
在网上读到这样一句话:
使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的 副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比 用一般变量传递参数的效率和所占空间都好。
——————————————————————————————————分割线——————————————————————————————————
我想问一下这句话“如果传递的是对象,还将调用拷贝构造函数。”,对象不是引用型变量吗(java中的概念,C++应该是一样吧),那最多在栈内生成一个实例首地址的局部变量,为什么还要调用拷贝构造函数,直接指向不就行了吗?还是说java和C++有差异?
搜索更多相关主题的帖子: 分割线 
2013-03-12 17:25
gujunpu
Rank: 1
等 级:新手上路
帖 子:23
专家分:3
注 册:2012-2-25
收藏
得分:0 
以下是引用gujunpu在2013-3-12 17:25:59的发言:

在网上读到这样一句话:
使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的 副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比 用一般变量传递参数的效率和所占空间都好。
——————————————————————————————————分割线——————————————————————————————————
我想问一下这句话“如果传递的是对象,还将调用拷贝构造函数。”,对象不是引用型变量吗(java中的概念,C++应该是一样吧),那最多在栈内生成一个实例首地址的局部变量,为什么还要调用拷贝构造函数,直接指向不就行了吗?还是说java和C++有差异?

可能是我文字上没有理解清楚,原文的意思是不是“只要传递对象,就要使用拷贝构造函数”?
2013-03-12 17:33
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
这个涉及到实参和形参的概念咯
你在二楼说得很对,是jave和c++的区别...
c#也和java一样

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-03-13 08:28
ap0805319
Rank: 2
等 级:论坛游民
帖 子:23
专家分:23
注 册:2012-2-17
收藏
得分:0 
引用是被引用对象的一个别名,因此对引用的操作就如同对被引用对象的操作一样,会改变被引用对象的值,如果直接用实参传值给形参,则将在栈内建立一个实参对象的副本,当函数返回时,栈内的实参对象的副本也会被撤消,其实无论是什么类型的参数都是当作对象看待,因此当被传递的是类对象时,也会在栈内创建一个类对象的副本,注意,那句话的意思是调用“拷贝构造函数”,“拷贝构造函数”是一个函数,而不又调用又拷贝,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。
2013-03-13 10:07
gujunpu
Rank: 1
等 级:新手上路
帖 子:23
专家分:3
注 册:2012-2-25
收藏
得分:0 
回复 4楼 ap0805319
谢谢,那如果在定义函数的时候,声明的形参就是引用,就不建立副本了吧,如Initialize(&g)。
还有那句“其实无论是什么类型的参数都是当作对象看待”不是很明白,是都传一个地址过来吗?
2013-03-22 21:31
快速回复:关于“引用”在内使用上的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022572 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved