| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1302 人关注过本帖
标题:函数返回引用的问题
只看楼主 加入收藏
corrupt
Rank: 2
等 级:新手上路
威 望:3
帖 子:535
专家分:0
注 册:2004-9-29
收藏
得分:0 
不要看结果,结果一样不代表 是一样的...
楼楼上的说的还是清楚的

2006-08-26 12:21
蓝鹰
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2006-8-26
收藏
得分:0 
1.我先解释10楼的问题:
int & B(int &n)
{
n++;
return n;
} 返回的值是地址类型

int B(int &n)
{
n++;
return n;
} 返回的值是整数类型

2.我再回答楼主的问题
假如“=”是被重载的,而a,b,c是一个类的不同对象,那么看下面的表达式:
(a=b)=c
把b赋给a,那么此时a==b,但是a=b这是个表达式,是表达式就要有值,他的值就是“=”的返回值,但他应该返回什么样的值呢?如果返回一个对象(注意不是引用),那么在return z 时候就会临时建立一个临时对象(系统自动的),然后调用类的复制构造函数,把z的值赋给临时对象,此时临时对象的值等于z的值,接着把临时对象的值返回,最后,再调用类的析构函数来销毁临时对象。 这样来看,如果类没有自定义的复制构造函数,此过程中会调用类的默认复制构造函数,从而出现内存复制情况。当然如果返回一个该类的引用,就不会出现建立临时对象的情况,也就没有内存复制的情况了。
当然,出现内存复制并不一定不行,关键是看具体的类,操作能不能改变对象,或在析够函数中销毁对象或内存使用,关于这个你可以参考相关资料,这不在这个问题的讨论范围内。
明白了吗?
2006-08-26 14:23
Pallove
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2006-3-26
收藏
得分:0 

多谢楼上这位大兄。你教会了我。


当一剑渐行渐远,传奇似在隐退...... ......另一剑若隐若现,经典似又重生......
2006-08-26 15:14
快速回复:函数返回引用的问题
数据加载中...
 
   



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

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