C++内置类型的成员变量初始值的问题探讨

最近碰到个问题,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;
}
运行后通过监视面板检测变量值如下:
技术分享

输出:

技术分享

为什么加了一个类成员变量动态创建的对象全部不初始化内置变量了呢?

编译器君你能告诉我吗?

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。