ホームページ >バックエンド開発 >C++ >`A a = A(5);` でコピー コンストラクターが呼び出されないのはなぜですか?

`A a = A(5);` でコピー コンストラクターが呼び出されないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-15 14:12:151004ブラウズ

Why Isn't the Copy Constructor Called in `A a = A(5);`?

コピー コンストラクターが呼び出されない理由を理解する

提供されたコード スニペットでは、クラス A のコンストラクターは、左側のオブジェクトに対して呼び出されません。そうあるべきだという仮定。この動作はコンパイラの最適化によるものではなく、C の確立された機能によるものです。

C 標準 (§12.8.15) によれば、ステートメント T = x;は T(x); と同等です。したがって、コード スニペットでは:

A a = A(5);

システムは最初に A(5) を構築し、それを a に割り当てます。代入演算子 (=) が使用されているため、コピー コンストラクターは呼び出されません。

コンパイラーにデフォルトで左側のオブジェクトを構築させるには、次のコードを記述できます:

A a;
// a is now a fully constructed object
a = A(5);

このシナリオでは、最初に a がデフォルトで構築され、オブジェクトがいっぱいになったためコピー コンストラクターが呼び出されます。

したがって、この動作と C プログラミングにおける潜在的な影響を認識することが重要です。

以上が`A a = A(5);` でコピー コンストラクターが呼び出されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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