最近碰到个问题,C++内置类型的成员变量(如int)的默认初始值到底是多少?
我的开发环境:VIN7 64位,VS2010。
测试代码:
class Solution { public: int a; char c; static int sb; }; Solution x; void main() { Solution s; void *pv = operator new(sizeof(Solution)); Solution *ps = new (pv)Solution(); Solution *ps2 = new Solution(); delete ps2; ps->~Solution(); operator delete (ps); int a = 0; cin >> a; }
运行后通过监视面板检测变量值如下:
发现全局变量x的内置类型初始化为0,局部变量s的内置变量没有初始化,通过动态创建的ps和ps2都初始化了,类变量sb的值没有初始化。
结果与C++Primer里面的结论一样:
为何动态分配的局部对象会初始化内置变量呢?编译器是个任性的孩子哇。
更加有趣的来了。
然后增加一个类类型的成员变量:
class desT { public: desT(){ cout << "construct desT"<< endl; } int a; char c; static int sb; }; class Solution { public: int a; char c; static int sb; desT m_obj; }; Solution x; void main() { Solution s; void *pv = operator new(sizeof(Solution)); Solution *ps = new (pv)Solution(); Solution *ps2 = new Solution(); delete ps2; ps->~Solution(); operator delete (ps); int a = 0; cin >> a; }
运行后通过监视面板检测变量值如下:
输出:
为什么加了一个类成员变量动态创建的对象全部不初始化内置变量了呢?
编译器君你能告诉我吗?
时间: 2024-11-08 16:13:54