引用是为了让形参和实参统一,其中一个改变,被引用的也会改变!运算符也一样!
比如,a + b这个表达式,在计算机里编译的时候看作为:a.operator+(b),就要求‘+’号是需要引用的。
一般来讲这里返回引用的主要目的是实现连级运算,而是用引用在这里主要是为了效率。
比如a=b=c这个表达式是合法的,原因就是它可以视为a=(b=c),而b=c返回了一个关于b的引用。
至于为什么不用值传递,这就是效率的问题了。在a=b中显然b只需要提供b的各个成员变量就可以,而不一定要生成b的副本。同样,返回值是为了连级运算,因此也不需要生成新副本,用引用传递可以避免无用的复制。比如一个有1000000个元素的单链表,进行a=b本来只需要复制一次,而用值传递就就行了3次复制,显然不划算。
另外,为了安全起见,一般会这样写const A& operator=(const A &){},因为这几个引用本身的属性都是不应当被改变的。