コピー代入演算子における参照/Const 参照戻りの必要性
C のコピー代入演算子は、戻り値の型に関して疑問を引き起こします。新しいオブジェクトのコピーではなく、参照または const 参照を返すのはなぜですか?この概念を明確にするために、次のシナリオを考えてみましょう。
A a1(param); A a2 = a1; A a3; a3 = a2; // The problematic line
コピー代入演算子が次のように定義されていると仮定します。
A A::operator=(const A& a) { if (this == &a) { return *this; } param = a.param; return *this; }
コピー代入演算子から参照を返すことには大きな利点があります。コピーを返却するよりも。参照を返すことにより、あるオブジェクトから別のオブジェクトに値をコピーするだけなので、最小限の作業で済みます。
ただし、値で返すと追加のオーバーヘッドが発生します。代入演算子が呼び出されるたびにコンストラクターとデストラクターが呼び出されるため、不必要なリソースが消費されます。例:
A& operator=(const A& rhs) { /* ... */ }; a = b = c; // Calls assignment operator twice. Efficient.
対照的に:
A operator=(const A& rhs) { /* ... */ }; a = b = c; // Calls assignment operator twice, calls copy constructor twice, calls destructor twice for temporary values. Inefficient.
したがって、コピー代入演算子から参照または const 参照を返すと、不必要なオブジェクトの作成と破棄が回避され、効率が向上するため、パフォーマンスが最適化されます。コードの保守性。
以上がC のコピー代入演算子がコピーではなく参照を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。