#include <iostream>
class X {
public:
int a;
};
int main(int argc, char *argv[]) {
X x;
std::cout<<x.a<<std::endl;
}
なぜ 2130567168 なのですか? 0じゃない?
#include <iostream>
class X {
public:
int a;
};
int main(int argc, char *argv[]) {
X x;
std::cout<<x.a<<std::endl;
}
なぜ 2130567168 なのですか? 0じゃない?
それは何でもかまいません。は初期化されていないためx.a
、値はIndeterminateです。
C++ では、クラス メンバーはデフォルトで初期化されません。明示的な初期化が必要です。明示的な初期化がなければ、初期化されないままです。このような初期化されていないクラス メンバーを使用すると、プログラムにUndefined Behaviorという 1 つのことだけが与えられます。
Member Initializer listx.a
を使用して、意味のあるものに初期化する必要があります。
class X
{
public:
int a;
X(int i):a(i){}
X():a(0){}
};