値による受け渡しと右辺値による受け渡しの参照
いつ宣言するか:
状況ここで、関数は渡されたパラメーターの所有権を必要とし、関数を次のように宣言します。
- void foo(Widget w);値渡しであり、渡された引数の暗黙的なコピーが必要です。
- void foo(Widget&& w);右辺値参照によって渡され、渡された引数の明示的な移動が可能になります。
主な違い:
1.コピー制御:
- 値による受け渡し: 暗黙的なコピーが発生し、追加コストが発生する可能性があります。
- 右辺値参照による受け渡し: コピーの構築には明示的な移動が必要であり、呼び出し元に強制的です。コピーを管理します。
2.インターフェイス セマンティクス:
- 値パラメータ: 関数は、操作対象のパラメータのコピーが必要であることを示します。
- 右辺値参照パラメータ: 関数は所有権を取得することを目的としています。引数を変更し、変更する場合があります。
3.効率:
- 値による受け渡し: 単一の移動コンストラクター呼び出しを排除できます。
- 右辺値参照による受け渡し: コンパイラーの最適化により、呼び出し側でのコピーや移動を排除できます。
- ただし、渡されたパラメーターに大きなメンバーや高価なメンバーが含まれていない場合、効率の向上はごくわずかである可能性があります。
インターフェイスの影響:
右辺値参照パラメータは次の意図を伝えます:
- 関数は渡された値の所有権を要求します。
- 関数は呼び出し元の参照に影響を与えることなく、渡された値を変更する可能性があります。
- 呼び出し元は、渡された値に対するすべての所有権と責任を放棄します。
対照的に、値パラメータは次のことを示します。
- 関数は渡された値のコピーに対して動作します。
- 呼び出し元は渡された値の所有権を保持し、関数による変更は影響しません。
以上が値渡しと右辺値参照を使用する必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。