Guy*_*Guy 1 c++ reference operator-overloading operators
当我们重载operator =(赋值)时,我想知道为什么我们应该返回一个引用.一方面,我见过的(重载运算符=)的大多数示例返回一个引用,但另一方面,我看到了几个没有返回引用的示例(同一主题).
有人解释我,当我们需要返回一个引用(特别是在运算符=重载中),并给出示例吗?
返回引用的主要原因operator=是因为AssignableC++ 03集合项的旧属性需要它.
C++ 11中有相应的要求.
这些要求源于内置operator=,后者又从C中获得,它支持分配链接,例如写入
a = b = 666;
Run Code Online (Sandbox Code Playgroud)
被解析为
a = (b = 666);
Run Code Online (Sandbox Code Playgroud)
对于用户定义operator=它
效率较低,
通常更复杂(例如,对于迭代器实现)和
基于副作用打开Unholy Practices™的大门,
所以很长一段时间,直到有人把注意力集中在标准库的要求上,我才定义operator=为返回void.更高效,更简洁,不支持不良做法.但是有了这样的要求 - 这是冰雪历史™的另一个不好的例子 - 一个人必须这么做.