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的值,接着把临时对象的值返回,最后,再调用类的析构函数来销毁临时对象。 这样来看,如果类没有自定义的复制构造函数,此过程中会调用类的默认复制构造函数,从而出现内存复制情况。当然如果返回一个该类的引用,就不会出现建立临时对象的情况,也就没有内存复制的情况了。
当然,出现内存复制并不一定不行,关键是看具体的类,操作能不能改变对象,或在析够函数中销毁对象或内存使用,关于这个你可以参考相关资料,这不在这个问题的讨论范围内。
明白了吗?