値による受け渡しと右辺値参照による受け渡し
関数パラメーターの値による受け渡しと右辺値参照による受け渡しの決定は、いくつかの要因によって異なります。
値渡し
-
(ウィジェット w)
- のコピーを作成します入力パラメータを元のパラメータのままにします。
- 暗黙的なコピー操作が含まれますが、大規模なオブジェクトや複雑なオブジェクトの場合は非効率的になる可能性があります。
- パラメータを変更しない場合でも、パラメータの所有権を引き継ぎます。 .
右辺値参照による渡し
-
(ウィジェット&& w)
- パラメーターを右辺値 (期限切れの一時オブジェクトなど) で強制的に初期化し、コピー操作を防ぎます。
- 呼び出し元がコピーを必要とする場合は、std::move を使用してコピーを明示的に宣言する必要があります。 .
- 呼び出し元のコピーに反映される戻り値の変更を無効にします。
主な違い
-
所有権のコピー: 値による受け渡しではパラメーターのコピーが必須ですが、右辺値参照による受け渡しでは関数がパラメーターを移動できるため、場合によっては余分な移動コンストラクターの呼び出しが不要になります。
-
インターフェイス セマンティクス: 右辺値参照は、関数が値の所有権を取得するつもりであり、その継続的な存在に対して責任を負わないことを示します。
-
効率: 右辺値で渡す呼び出し元が入力オブジェクトのコピーを必要としない場合、参照はより効率的です。
正しいメソッドの選択
次の場合は値渡しを使用します。 :
- 関数には、入力オブジェクトのコピーまたは変更されたバージョンが必要です。
- 入力オブジェクトが小さいか、コピーするコストが低いです。
パスを使用してください
- 関数が所有権を取得して入力オブジェクトを変更する必要がある場合。
- 入力オブジェクトが大きいか、コピーにコストがかかる。
- 呼び出し元入力オブジェクトのコピーは必要ありません。
以上がC で値渡しと右辺値参照を選択するのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。