提供されたコード スニペットでは、クラス 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 サイトの他の関連記事を参照してください。