タイトルがすべてを物語っています。
最初のケース f(const X&) は古き良き const 参照パラメーターです。
ただし、変更可能な参照パラメーターを使用する場合、常に X&& を使用しないのはなぜでしょうか? このようにして、クライアント コードは、f() が使用法を指示するのではなく、一時または通常の左辺値を使用できます。
編集:私の側のずさんさ、申し訳ありません。つまり、fc(const X&) と fm(X&&) が与えられた場合、fm(X&) は必要ですか?
編集: 例: ステートレス デコレータを使用してパラメーターとして渡します。
class Base64Writer: public Writer {
public:
Base64Writer(Writer& w): w_(w) {}
private:
virtual void doWrite() override;
Writer& w_;
}
void func(Writer&& w) { w.doWrite(); }
// to be called as
Writer wr = ...;
func(Base64Writer(wr));