我对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;
}
Run Code Online (Sandbox Code Playgroud)
输出是
myint1.i是0
myint2.i是-1078649848
你需要在INT中声明一个c'tor并强制'i'到一个明确定义的值.
class INT {
public:
INT() : i(0) {}
...
};
Run Code Online (Sandbox Code Playgroud)
i仍然是POD,因此默认情况下不会初始化.无论是在堆栈上还是在堆上分配都没有区别 - 在这两种情况下,值if i都是未定义的.