Как можно назначить возвращаемый объект?

В 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, которую я выявил здесь.

18
задан qdii 12 January 2012 в 08:55
поделиться