[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.
原因有两个:1) 保证两个不同的对象实例的地址不同;2) 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年02月15日 ,阅读量:615 ,标签:C++

版权声明:若非特别注明,本站所有文章均为作者原创,转载请务必注明原文地址。