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;来实现的。因为这一行语句执行完,栈区才会释放,这个引用关系才会解除。但我现在不确定是不是这样)

猜你喜欢

转载自blog.csdn.net/meixingshi/article/details/114292362