[C++] 一个空类/结构体的大小是多少?

陪她去流浪 桃子 2017年02月15日 编辑 阅读次数:2672

如下一个类(或结构体),求 sizeof(Test) 的值是多少。

1
2
3
class Test {

};

如果测试一下的话,会发现,它的大小是 1 字节,而不是 0 字节。

为什么呢?C++ 的发明者 Bjarne Stroustrup 是这样说的:

  • To ensure that the addresses of two different objects will be different.
  • For the same reason, "new" always returns pointers to distinct objects.
  • 保证两个不同的对象实例的地址不同;
  • new 运算符总是返回两个不同的对象。

如果为 0 字节的话,还会有一些其它问题,像是:

  • Test* p; p++; 将不能正常工作;
  • Test a[2]; sizeof(a)/sizeof(*a); 将会导致除零异常。

多数人应该知道上面这个答案,但是如下两个类型的又分别占用多少字节呢?

1
2
3
4
5
6
7
class Derived : public Test {

};

class Derived2 : public Test {
    char c;
};

答案是:这 3 个类的大小都是 1 个字节。是不是觉得有点意外?

参考:

标签:C++