値による受け渡し: 引数の新しいコピーを作成します。元のオブジェクトは変更されません。
左辺値による渡し参照: 元のオブジェクトを変更します。安定した 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 サイトの他の関連記事を参照してください。