コピー代入演算子に参照/定数参照を返す必要があるのはなぜですか?
C では、コピー代入演算子は通常参照を返します。またはそれ自体への const 参照。この設計上の選択は、パフォーマンスを考慮した結果であり、不必要なコピーを回避します。
次の例を考えてみましょう。
A a1(param); A a2 = a1; A a3; a3 = a2;
コピー代入演算子 Operator= が新しいオブジェクトのコピーを返したとします。この場合、各代入操作は、一時コピーの作成と、代入後のそのコピーの破棄をトリガーします。
A a3 = a2; // Creates a temporary copy of a2
ただし、参照または const 参照を返すと、代入操作は次のようになります。はるかに効率的です。データはあるオブジェクトから別のオブジェクトに直接コピーされ、一時コピーを作成したり破棄したりする必要はありません。
A& operator=(const A& a) { /* ... */ } a3 = a2; // Copies data directly from a2 without creating a temporary copy
参照または const 参照を返すことで、演算子を連鎖させることもできます。上の例では、代入演算子が呼び出し側オブジェクトへの参照を返すため、ステートメント a = b = c は正しく機能します。
対照的に、演算子がコピーを返した場合、連鎖は不可能になります。ステートメント a = b = c はコンパイル エラーを生成します。c を a に代入するにはコピーが必要ですが、b を a に代入するとすでにコピーが作成されているためです。
したがって、参照または const が返されます。コピー代入演算子からの参照は、パフォーマンスと複数の代入の正しいチェーンの両方にとって不可欠です。
以上がC のコピー代入演算子が参照 (または Const 参照) を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。