В Effective C++, Item 3, Scott Meyers предлагает перегрузить operator*
для класса с именем Rational
:
class Rational { ... };
const Rational operator*(const Rational& lhs, const Rational& rhs);
Причина, по которой возвращаемое значение является const
-квалифицированным, объясняется в следующей строке: если бы оно не было const
, программисты могли бы написать код типа:
(a * b) = c;
или, более вероятно:
if (a*b = c)
Справедливо. Теперь я запутался, так как думал, что возвращаемое значение функции, здесь operator*, является r-значением, поэтому не может быть присвоено. Я так понимаю, что не присваиваемое, потому что если бы у меня было:
int foo();
foo() += 3;
это бы не скомпилировалось с invalid lvalue in assignment
.
Почему этого не происходит в данном случае? Может кто-нибудь пролить свет на это?
EDIT: Я видел много других тем по этому пункту Скотта Мейерса, но ни в одной из них не рассматривалась проблема rvalue, которую я выявил здесь.