ホームページ > バックエンド開発 > C++ > C のコピー代入演算子が参照 (または Const 参照) を返すのはなぜですか?

C のコピー代入演算子が参照 (または Const 参照) を返すのはなぜですか?

DDD
リリース: 2024-12-13 22:25:16
オリジナル
828 人が閲覧しました

Why Do C   Copy Assignment Operators Return a Reference (or Const Reference)?

コピー代入演算子に参照/定数参照を返す必要があるのはなぜですか?

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 サイトの他の関連記事を参照してください。

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