効果的な C++ の項目 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* は右辺値であり、割り当て可能ではないと思ったので、今は混乱しています。私が持っていた場合:
int foo();
foo() += 3;
でコンパイルに失敗しますinvalid lvalue in assignment
。なぜここでそれが起こらないのですか?誰かがこれに光を当てることができますか?
EDIT : Scott Meyers のまさに Item に関する他の多くのスレッドを見てきましたが、ここで公開した右辺値の問題に取り組むものはありませんでした。