В Эффективном С++, пункт 3, Скотт Майерс предлагает перегружать operator*
для класса с именем Rational
:
class Rational { ... };
const Rational operator*(const Rational& lhs, const Rational& rhs);
Причина для возвращаемого значения const
-qualified объясняется в следующей строке: если это не было const
, программисты могли написать код, например:
(a * b) = c;
или, более вероятно:
if (a*b = c)
Достаточно честный. Теперь Im запутался, поскольку я думал, что возвращаемое значение функции, здесь оператор *, было rvalue, поэтому не назначалось. Я считаю, что это не назначается, потому что если бы у меня было:
int foo();
foo() += 3;
который не смог бы скомпилировать с помощью invalid lvalue in assignment
.
Почему это не происходит? Может кто-то пролить свет на это?
РЕДАКТИРОВАТЬ. Я видел много других потоков на этом самом предмете Скотта Мейерса, но никто не решал проблему с rvalue, которую я раскрыл здесь.