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

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

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); 将会导致除零异常。

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

class Derived : public Test {

};

class Derived2 : public Test {
    char c;
};

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

参考:

如果文章有帮助到你,请我喝杯冰可乐吧~

发表于:2017年2月15日 ,阅读量:1214 ,标签:C++