ホームページ > バックエンド開発 > C++ > C で適切なパラメータ受け渡しメカニズムを選択するにはどうすればよいですか?

C で適切なパラメータ受け渡しメカニズムを選択するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-24 19:17:17
オリジナル
748 人が閲覧しました

How to Choose the Right Parameter Passing Mechanism in C  ?

パラメータを正しく渡す方法

受け渡しメカニズムを理解する

値による受け渡し: 引数の新しいコピーを作成します。元のオブジェクトは変更されません。
左辺値による渡し参照: 元のオブジェクトを変更します。安定した ID (lvalue) が必要です。
Const への lvalue 参照による渡し: 元のオブジェクトを変更せずに観察します。左辺値と右辺値の両方を受け入れます。
右辺値による受け渡し 参照: 右辺値 (一時オブジェクトまたは移動元オブジェクト) にバインドします。移動操作を実行できます。

ベスト プラクティス

変更に左辺値参照を使用する:
関数が元のオブジェクトを変更する必要がある場合は、左辺値参照 (& ).

Const への lvalue 参照を使用する観察:
オブジェクトの状態のみを観察する関数の場合は、左辺値参照を const (const &) に渡します。

コピー集中型ではない型の値による受け渡しを検討してください。 :
コピーが安価な場合 (整数、文字など)、渡すことを検討してください。 value.

左辺値と右辺値のオーバーロード (必要な場合):
高価な移動が含まれており、左辺値からの移動を避けたい場合は、別個のオーバーロードを作成します。

汎用処理に完全転送を利用する:
関数テンプレートを使用するおよび std::forward を使用して、引数の型 (rvalue/lvalue) に基づいてコピーするか移動するかを自動的に決定します。

分析例

CreditCard クラス: 2 つのバージョンを持つコンストラクター:

CreditCard(CreditCard const& other); // lvalue reference to copy
CreditCard(CreditCard&& other); // rvalue reference to move
ログイン後にコピー

CreditCard を使用したアカウント クラスメンバー:
必要な動作に基づいて次のコンストラクターのいずれかを使用します:

Account(std::string number, float amount, CreditCard const& creditCard); // Copy
Account(std::string number, float amount, CreditCard&& creditCard); // Move
ログイン後にコピー

アカウントのベクトルを持つアカウント クラス メンバー:
参照渡し、またはconst 参照。変更が予期されるかどうかに応じて異なります。

Client(std::string firstName, std::string lastName, std::vector<Account> accounts); // Reference for modification
Client(std::string firstName, std::string lastName, std::vector<const Account> accounts); // Reference to const for observation
ログイン後にコピー

以上がC で適切なパラメータ受け渡しメカニズムを選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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