在 Effective C++, Item 3 中,Scott Meyers 建议operator*
对名为 的类进行重载Rational
:
class Rational { ... };
const Rational operator*(const Rational& lhs, const Rational& rhs);
返回值是const
-qualified 的原因在以下行中解释:如果不是const
,程序员可以编写如下代码:
(a * b) = c;
或者,更有可能:
if (a*b = c)
很公平。现在我很困惑,因为我认为一个函数的返回值,这里是 operator*,是一个右值,因此不可赋值。我认为它不可分配,因为如果我有:
int foo();
foo() += 3;
那将无法使用invalid lvalue in assignment
. 为什么这里不会发生?有人可以对此有所了解吗?
编辑:我在 Scott Meyers 的那个项目上看到了许多其他线程,但没有一个解决我在这里暴露的右值问题。