我们先来看一个简单的程序:

#include <iostream>
using namespace std;

class A
{
};

int main()
{
	cout << sizeof(A) << endl; // 1

	return 0;
}
     为什么是1而不是0呢? 当时, 我面试某公司的实习生, 被问到这个题目。 我告诉面试官, 结果是1, 但说不出原因。 面试官显然不是特别满意。


     我们知道, 程序中的每个变量/对象都有唯一的地址, 而空类也是可以创建对象的, 如果长度为0, 那岂不是所有对象的地址都一致? 显然, 这是不行的, 所以空类的大小不能为0.  原来如此

     查阅资料后, 才知道, 原来编译器会默认在空类中加一个哑巴char,  且看程序:

#include <iostream>
using namespace std;

class A
{
};


int main()
{
	cout << sizeof(A) << endl;
	
	A a1, a2;
	cout << &a1 << endl;
	cout << &a2 << endl;

	char c1, c2;
	cout << (long)&c1 << endl;   // long不可少
	cout << (long)&c2 << endl;   // long不可少

	
	int i1, i2;
	cout << &i1 << endl;
	cout << &i2 << endl;

	return 0;
}
      结果为:

1
0013FF7C
0013FF78
1310580
1310576
0013FF6C
0013FF68



本文转载:CSDN博客