ホームページ > バックエンド開発 > C++ > 「Class object();」 が C オブジェクトを作成しないのはなぜですか?

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

Susan Sarandon
リリース: 2024-12-18 11:04:10
オリジナル
714 人が閲覧しました

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

コンストラクター呼び出しの不在を理解する

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

問題

問題のある行:

Class object();
ログイン後にコピー
ログイン後にコピー

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

Class object;
ログイン後にコピー

舞台裏: 最も厄介な解析

最初のコード スニペットのハイライトこれは、C の「最も厄介な解析」として知られる問題です。

Class object();
ログイン後にコピー
ログイン後にコピー

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

コードの修正

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

#include <iostream>
using namespace std;

class Class {
    Class() {
        cout << "default constructor called";
    }

    ~Class() {
        cout << "destructor called";
    }
};

int main() {
    Class object; // Correctly invokes the constructor
}
ログイン後にコピー

修正されたコードを実行して、予想される出力を確認します:

default constructor called
destructor called
ログイン後にコピー

以上が「Class object();」 が C オブジェクトを作成しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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