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