1.什么情况需要返回引用
a.需要进行连续的赋值运算
b.增加效率,防止返回临时对象时产生的构造函数和析构函数来增加程序负担。
2.test &operator=(const test &a)
ex:
test &operator=(const test &a)
{
if (this == &other) return *this;
this->para=a.para;
return *this;
}
test a(1),b(2);
a=b;//a=2
a. const test &a, 让传入a的变量以引用的方式传入,就不需要在函数中在开辟一个临时空间用来存放赋值a的临时变量,而且函数内对a的操作,也会直接改变全局的变量a,所以需要增加const稳定。
b.test &operator= 意思为返回一个变量的引用,也就是返回test a的引用,相当于直接返回a。
3.如果返回对象
ex:
test operator=(const test &a)
{
if (this == &other) return *this;
this->para=a.para;
return *this;
}
test a(1),b(2);
a=b;//a=2
a.test operator= 的返回直接返回一个,复制的对象命名为 a_copy,然后调用系统的复制构造函数将,将a_copy的值复制给a,这过程中就会调用一次复制构造函数,然后再析构复制构造,这样就会减缓系统运行效率。
4.需要连续赋值时
ex1:&
test a(1),b(2),c(3);
a=b=c;//a=3,调用0次赋值构造
(a=b)=c;//a=3
ex2:没有&
test a(1),b(2),c(3);
a=b=c;//a=3,调用两次赋值构造
(a=b)=c;//a=2
a.ex1因为ex1中返回引用,相当于返回对象本身,(a=b)返回为a的引用,a.&=c。所以最后a=3;
而ex2中,返回一个a的临时赋值对象,(a=b),返回一个临时对象从(a=b)copy,然后(a=b)copy=c,c赋值给临时对象,而不是a,所以a还是等于b。