C++类对象重载赋值的时候为什么要返回引用类型?

有两个原因
第一个是为了减少内存空间的浪费和多余的操作。
如果不使用引用,则函数首先在内存中创建一个空间接受返回值,然后再从这个地址赋值给变量
以下面为例

int func(int x){return x};
int c=func(2);

实际上是这样一个操作,先创建了一个临时变量temp接收返回值,然后再把temp赋值给c

x=2;//x在栈区
temp=x;
c=temp;

而如果是引用返回,则相当于是直接把值赋给变量

c=x;

实际上应该是创建了一个引用?这里原理我暂时理解不清楚,只能把效果讲清楚。

所以如果是类对象重载operator=函数的时候
下面的代码,将会产生额外的空间消耗

A=B=C;

第二个原因就是特殊赋值
这种情况下,如果开始的时候A=1,B=2,C=3;

(A=B)=C;

如果是直接返回,那么最终是A=2;而引用返回则是A=3;
为什么?
因为没有引用的时候,A=B的结果是产生了一个临时变量temp;所以执行完A=B后,他接下来执行的是temp=C;
而返回引用的时候,则是建立了一个别名;所以执行完A=B,执行的是C=B;
(实际上可能是通过&c=x,x=B;来实现的。因为这一行语句执行完,栈区才会释放,这个引用关系才会解除。但我现在不确定是不是这样)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值