我对 C++ 中的默认初始化有疑问。有人告诉我非 POD 对象将自动初始化。但是我对下面的代码感到困惑。
为什么当我使用指针时,变量 i 被初始化为 0,而当我声明局部变量时,却不是。我使用 g++ 作为编译器。
class INT {
public: int i;
};
int main () {
INT* myint1 = new INT;
INT myint2;
cout<<"myint1.i is "<<myint1->i<<endl;
cout<<"myint2.i is "<<myint2.i<<endl;
return 0;
}
输出是
myint1.i 为 0
myint2.i 是-1078649848
最佳答案
您需要在 INT 中声明一个 c'tor 并将“i”强制为定义明确的值。
class INT {
public:
INT() : i(0) {}
...
};
i
仍然是一个 POD,因此默认情况下不会初始化。无论您是在堆栈上分配还是从堆上分配都没有区别 - 在这两种情况下,i
的值都是未定义的。
关于c++ - C++中的默认初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2224159/