7

operator+設計することは可能ですか?また、これを可能にするためにクラスCをオーバーロードするにはどうすればよいですか?

C&& c = c1 + c2;

しかし、これは不可能です:

c1 + c2 = something;

編集: オブジェクトを小文字に変更しました。c1c2およびcクラスのオブジェクトですC&&論理operator&&ではなく、右辺値参照です。

たとえば、次のように記述します。

double&& d = 1.0 + 2.0;

は 100% 適切な (新しい) C++ コードですが、

1.0 + 2.0 = 4.0;

明らかにコンパイルエラーです。私はまったく同じことを望んでいますが、代わりに double の、私の class C.

2 番目の編集: 演算子が C または C& を返した場合、右辺値参照への割り当てだけでなく、c1 + c2 への割り当ても行うことができますが、これは無意味です。ここで const を指定すると無効になりますが、右辺値への代入も無効になります。少なくとも VC++ 2k10 では。では、これはどのくらい2倍になるのでしょうか?

4

1 に答える 1

14

代入演算子を左辺値のみで呼び出し可能にします。

class C
{
    // ...

public:

    C& operator=(const C&) & = default;
};

閉じ括弧の後の単一のアンパサンドに注意してください。右辺値への割り当てを防ぎます。

于 2011-05-04T22:34:00.357 に答える