コピー代入演算子: 参照と値を返す
C では、コピー代入演算子は通常、新しいオブジェクトのコピーを返しません。代わりに、参照または const 参照を返します。これが推奨されるアプローチである理由は何ですか?
参照による戻りの理論的根拠
まず、参照による戻りにより、代入に関連する計算オーバーヘッドが最小限に抑えられます。これには、あるオブジェクトから別のオブジェクトに値をコピーするだけで、一時オブジェクトの作成と破棄が回避されます。これは、コピーの構築や削除にリソースが大量に消費される可能性がある複雑なオブジェクトや大きなオブジェクトを扱う場合に特に有益です。
値による戻りの結果
一方、コピー代入演算子が値で返す場合、各演算子に対して次のシーケンスがトリガーされます。 assign:
このシーケンスはチェーン内の割り当てごとに繰り返されるため、過剰なコンストラクターとデストラクターの呼び出しが発生します。次のシナリオを考えてみましょう。
A a1(param); A a2 = a1; A a3; a3 = a2; // Line in question
operator= が値によって返される場合、a2 と a3 への代入のために 2 つのコンストラクターとデストラクターの呼び出しが必要になりますが、参照によって返されることでこのオーバーヘッドが回避されます。
追加の考慮事項
参照による戻りでは、代入演算子が左辺値を返すこともできます。割り当てられたオブジェクトをさらに変更できるようになります。対照的に、値によって返すと右辺値が生成され、これは直接変更できません。
結論
参照によって返すのは、C のコピー代入演算子の標準的な方法です。 、適切な戻り値の型を決定する際には、特定のコンテキストと要件を比較検討することが重要です。ただし、効率とオブジェクト管理が関係するほとんどのシナリオでは、参照を返すことが依然として推奨される選択肢です。
以上がC のコピー代入演算子が通常、値ではなく参照を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。