C で値渡し、参照渡し、右辺値参照のどれを選択すればよいでしょうか?

Mary-Kate Olsen
リリース: 2024-11-22 04:59:17
オリジナル
539 人が閲覧しました

How Should I Choose Between Passing by Value, Reference, and Rvalue Reference in C  ?

C でのパラメータの受け渡しについて

C でパラメータを渡すとき、適切なメソッド (値、参照、または右辺値参照による) を選択すると、コード設計の効率と明確さが確保されます。 。各シナリオのベスト プラクティスは次のとおりです。

1.左辺値による渡し参照:

  • パラメータを変更する必要があり、これらの変更が呼び出し元に表示される必要がある場合。
  • 例: void foo(my_class& obj)元のオブジェクトの変更を反映するために関数内の変更を許可します。

2. Const への左辺値参照の渡し:

  • パラメータの状態を監視するだけでよく、必要な変更は必要ない場合。
  • 例: void foo(my_class const& obj)オブジェクトのデータを変更せずにアクセスできるようにします。状態。

3.値渡し:

  • 基本型 (int、bool など) または高速コピーを伴う型の場合、このアプローチは効率を優先します。
  • 例: void foo(my_class obj) ) 左辺値か右辺値かに応じて、コピーまたは移動が確実に行われます。合格しました。

4.左辺値と右辺値のオーバーロードを検討します。

  • 高価な移動を伴うオブジェクトの場合は、左辺値と右辺値を処理するための個別のオーバーロードを提供します。
  • 例: my_class& で foo() をオーバーロードします。そして my_class&&左辺値参照シナリオと右辺値参照シナリオをそれぞれ処理します。

5.完全転送の利用:

  • 不指定の型への右辺値参照を受け入れ、それを std::forward で転送する関数テンプレートを作成します。
  • 例: template

提供されたコードについて:

クレジットカードを右辺値として渡す参照:

  • 2 つの移動とゼロのコピーという主張は正しくありません。
  • CreditCard の右辺値を渡すとき、参照バインディング中に 1 つの移動のみが発生します。

のオーバーロードコンストラクター:

  • CreditCard への左辺値参照と CreditCard への右辺値参照に対して個別のコンストラクター オーバーロードを作成することを検討してください。
  • このアプローチでは、左辺値のコピーと右辺値の移動が保証され、拡張性が高まります。効率性を高め、特定の要件を満たします。

以上がC で値渡し、参照渡し、右辺値参照のどれを選択すればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート