「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 「Class object();」 が C++ オブジェクトを作成しないのはなぜですか?

「Class object();」 が C++ オブジェクトを作成しないのはなぜですか?

2024 年 12 月 21 日に公開
ブラウズ:505

Why Doesn't `Class object();` Create a C   Object?

コンストラクター呼び出しの不在について

C では、クラスのオブジェクトを初期化するためにコンストラクターが使用されます。ただし、提供されたコード スニペットでは、コンストラクターが呼び出されず、予期しない動作が発生します。

問題

問題のある行:

Class object();

は、実際には Class クラスのコンストラクターを呼び出しません。代わりに、Class オブジェクトを返す関数を宣言します。コンストラクターを正しく呼び出してオブジェクトを作成するには、次の行にセミコロン (;) を追加する必要があります:

Class object;

Behind the Scenes: The Most Vexing Parse

Class object();
Class object();
という行に遭遇すると、C パーサーはそれを関数宣言または空の引数リストを使用した関数呼び出しとして曖昧に解釈します。この曖昧さにより、混乱や予期せぬ結果が生じることがよくあります。

コードの修正

コンストラクターを呼び出してオブジェクトを作成するには、コードを次のように更新する必要があります:

#include 名前空間 std を使用します。 クラス クラス { クラス() { cout Class object();修正されたコードを実行して、予想される出力を確認します:

デフォルトのコンストラクターが呼び出されます 呼び出されるデストラクター
            
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3