オブジェクトへのオプションの参照を取り、それが提供されていない場合は、関数の実行中に作成する関数を作成したい、つまり
void Foo(Bar& b = Bar()) { /* stuff */ }
もちろん、これは無効なコードです。このコンテキストでは、 を参照にBar暗黙的に変換することはできません。関数内で変更されているため、Bar参照を にすることはできません。constb
これは、右辺値参照を使用することで回避できます。つまり、
void Foo(Bar&& b = Bar()) { /* stuff */ }
これは右辺値参照の有効な使用法ですか? 通常、右辺値を渡す場合のように、渡された をクリアするつもりはありませんが、呼び出し元は引数を呼び出すstd::move必要があります。BarBar