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

C のコピー代入演算子がコピーではなく参照を返すのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-21 04:15:09440ブラウズ

Why Do C   Copy Assignment Operators Return References Instead of Copies?

コピー代入演算子における参照/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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。