在overloading = operator中返回引用的目的是什么

时间:2014-12-16 18:35:23

标签: c++ reference operator-overloading operators

当我们重载operator =(赋值)时,我想知道为什么我们应该返回一个引用。一方面,我所看到的(重载运算符=)的大多数示例都返回了一个引用,但另一方面,我看到了几个(同一主题的)示例(&#) 39; t返回参考。

当我们需要返回引用(特别是在运算符=重载中)时,有人可以解释一下,并举例说明吗?

3 个答案:

答案 0 :(得分:5)

operator=中返回引用的主要原因是因为C ++ 03集合项的旧Assignable属性,需要它。

C ++ 11中有相应的要求。

这些要求源于内置的operator=,后者又从C获得,它支持分配链接,例如写

a = b = 666;

被解析为

a = (b = 666);

对于用户定义的operator=

  • 效率较低,

  • 通常更复杂(例如,对于迭代器实现)和

  • 根据副作用打开了Unholy Practices™的大门,

等等很长一段时间,直到有人将我的注意力集中在标准库的要求上,我才将operator=定义为返回void。更高效,更简洁,不支持不良做法。但是有了这样一个要求 - 这是冰雪历史™的另一个不好的例子 - 一个人必须这么做。

答案 1 :(得分:2)

返回引用返回可修改的值(左值)。它允许以下内容:

(a = b) = c;

好吧,那个人有点傻,但这个更有道理:

++(a = b);

答案 2 :(得分:1)

一个原因是因为效率。通过在重载赋值运算符时传递和返回引用,可以防止大量构造函数和复制构造函数被调用。