C++运算符重载=号时,为什么返回值要用引用???而冲在重载+号时不需要???
2个回答
展开全部
引用是为了让形参和实参统一,其中一个改变,被引用的也会改变!运算符也一样!
比如,a + b这个表达式,在计算机里编译的时候看作为:a.operator+(b),就要求‘+’号是需要引用的。
比如,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 &){},因为这几个引用本身的属性都是不应当被改变的。
比如a=b=c这个表达式是合法的,原因就是它可以视为a=(b=c),而b=c返回了一个关于b的引用。
至于为什么不用值传递,这就是效率的问题了。在a=b中显然b只需要提供b的各个成员变量就可以,而不一定要生成b的副本。同样,返回值是为了连级运算,因此也不需要生成新副本,用引用传递可以避免无用的复制。比如一个有1000000个元素的单链表,进行a=b本来只需要复制一次,而用值传递就就行了3次复制,显然不划算。
另外,为了安全起见,一般会这样写const A& operator=(const A &){},因为这几个引用本身的属性都是不应当被改变的。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询