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;
}


运行后通过监视面板检测变量值如下:

C++内置类型的成员变量初始值的问题探讨_第1张图片

发现全局变量x的内置类型初始化为0,局部变量s的内置变量没有初始化,通过动态创建的ps和ps2都初始化了,类变量sb的值没有初始化。

结果与C++Primer里面的结论一样:

C++内置类型的成员变量初始值的问题探讨_第2张图片

为何动态分配的局部对象会初始化内置变量呢?编译器是个任性的孩子哇。

更加有趣的来了。

然后增加一个类类型的成员变量:

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;
}
运行后通过监视面板检测变量值如下:
C++内置类型的成员变量初始值的问题探讨_第3张图片

输出:

C++内置类型的成员变量初始值的问题探讨_第4张图片

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

编译器君你能告诉我吗?

你可能感兴趣的:(C++内置类型的成员变量初始值的问题探讨)