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