我已经通过Integer operator+(Integer & a, Integer & b)
重载了运算符+。但是,当我执行 a = b + c + d 时,它会将无效操作数的错误提供给二进制表达式。但是通过向参数添加const
,不会再出现错误。为什么会这样?
答案 0 :(得分:7)
b + c + d
为b + c
的结果生成临时值。然后将对该临时的引用传递给对operator+
()的第二次调用。
只有const
个引用可以绑定到临时对象。
有关进一步的讨论,请参阅How come a non-const reference cannot bind to a temporary object?