最近在准备实习面试,看了一些关于C++语法相关的内容。其中一个问题是空类的大小(例如,以下sizeof(T)的值?)
class T{
};
测了一下发现为1。
里面其实讲得很清楚了,主要的一个中心思想是在强调:任何相同类的不同对象应该拥有不同的地址。
但我们如何理解这句话?
int a[2];
int diff_a = &a[1] - &a[0];
这里我们知道diff_a = sizeof(int)的大小,即为4(以32位机器为例)。
同样的道理,我们假设
class T{
};
T *b = new T[2];
int diff_b = &b[1] - &b[0];
按照之前的思路,一样该有diff_b = sizeof(T)的大小。显然,如果sizeof(T) == 0, 那么 b[1] 和b[0]地址相同,这不是我们想看到的。
所以C++编译器默认给了空类的大小为1byte。具体为什么是1byte而不是n bytes (n > 1),那是编译器自己定的,我们也不能改变。