C++ 11が基準修飾子に基づいてメンバ関数をオーバーロードすることが可能になる:リファレンス修飾子のメンバ関数をオーバーロードするためのユースケースは何ですか?
class Foo {
public:
void f() &; // for when *this is an lvalue
void f() &&; // for when *this is an rvalue
};
Foo obj;
obj.f(); // calls lvalue overload
std::move(obj).f(); // calls rvalue overload
私はこれがどのように機能するかを理解し、それのためのユースケースは何ですか?
N2819は、標準ライブラリのほとんどの代入演算子をターゲット値に左寄せする(つまり、代入演算子に "&
"参照修飾子を追加する)ことを提案しましたが、this was rejectedを提案しています。それは、委員会がそれに同行しないことを決めた潜在的なユースケースでした。だから、合理的なユースケースは何ですか?
'huge_heavy_class && get()&&'が間違っている(ダングリング参照を引き起こし、shoukdが 'huge_heavy_class get()&&')、 'auto hhc = std :: move(factory().get());'が重複する。 – ildjarn
@ildjarn左辺値参照を返すのではなく、左辺値参照を返すのはなぜですか? 1つは他のものよりもぶらぶらそうです。そして、そうです、投稿のポイントは 'std :: move(factory()。get())を書く必要を避けるために書くべきコードがたくさんあることです - 私はそれをもっと明確にする必要があると思います。 – Casey
左辺値は左辺値に対してのみ返されるため、問題はありません。 – ildjarn