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,可能造成内存浪费或者效率低下?但是这个方法没有语法层面上的问题?
除此以外:如果有一个移动赋值函数,在链式赋值第二次开始,是不是会调用该移动赋值函数呢?这种情况下,对内存空间和效率有影响吗?