0

最初のケース:

class x
{
public:
    x(){}
    int mem;
}

2 番目のケース:

class x
{
public:
    int mem;
}

int main()
{
    x a;
    std::cout << a.mem; //member not initialized error in second case
}

デフォルトのコンストラクターを定義しない場合、コンパイラーはコンストラクターを追加します。コンストラクターの機能はメモリを初期化しています。では、なぜ 2 番目のケースではエラーが発生するのに、最初のケースではエラーが発生しないのでしょうか?

4

2 に答える 2

2

mどちらの場合もメンバー変数は初期化されていません。コンストラクターで明示的に初期化する必要があります

class x
{
public:
    x() : mem{} {}
    int mem;
};
于 2012-08-23T04:10:19.577 に答える
1

クラス定義の最後にセミコロンがありません - これが問題です。また、特定の方法で初期化する必要があるクラスでもない限り、デフォルトのコンストラクターがメンバー変数を初期化するとは思わないでください

class x
{
public:
    int mem;
};

int main()
{
    x a;
    std::cout << a.mem; //member not initialized error in second case
}
于 2012-08-23T04:07:57.137 に答える