关于C++中重载赋值操作符(=)返回引用的问题

C++小白一枚,遇到一个问题,查了很多资料还是没有想明白。
书上都说C++在重载赋值操作符(=)时,应该返回一个引用,这是因为能够实现链式赋值:比如a=b=c=1
但是,返回一个临时变量,会出现什么问题呢?
比如
class A{...};中有一个赋值操作符重载,返回A,原型如下:
A operator=(const A &);
定义了几个A类的变量 A a,b,c,d;
然后让a有了完整的成员。执行如下表达式:
b=c=d=a <=> b=(c=(d=a))
当d=a完成后,返回一个临时变量,然后c会调用赋值操作符重载的函数,把内部成员进行拷贝,执行结束后,c获得了d相同的内容,然后(d=a)中返回的d的临时变量
释放了,然后把c的临时变量给b,以此类推。

感觉这个过程也不会有什么问题呀。

为什么一定要返回引用呢?

我的想法:是不是因为返回临时变量,会需要一个临时变量的空间,如果是ADT或UDT,可能造成内存浪费或者效率低下?但是这个方法没有语法层面上的问题?

除此以外:如果有一个移动赋值函数,在链式赋值第二次开始,是不是会调用该移动赋值函数呢?这种情况下,对内存空间和效率有影响吗?

重载赋值操作符(=)返回引用的原因

  1. 允许进行连续赋值

  2. 防止返回对象(返回对象也可以进行连续赋值)的时候调用拷贝构造函数和析构函数导致不必要的开销,降低赋值运算符等的效率。

对于第二点原因:如果用“值传递”的方式,虽然功能仍然正确,但由于return语句要把*this拷贝到保存返回值的外部存储单元之中,增加了不必

要的开销,会降低赋值函数的效率

同求,楼主解决了吗?