c++空类占几个字节

2026年09月26日 13:00
有5个网友回答
网友(1):

这个情况情况比较复杂,举一个missgya的例子,在电脑上是C是8字节,也就是一个指向虚表的指针的大小,关于这个,再补充一点知识:
空类最常用于作为基类,那时候为了对齐实际可能占4个字节或以上。但这样会浪费空间,尤其是多重继承多个空基类的时候。所以编译器有空基类优化(empty base class optimization, EBCO)[1],令无非静态数据成员、无虚函数的基类实际占0字节。
因为BS大大当年说要确保两个不一样的对象拥有不同的地址---“To ensure that the addresses of two different objects will be different.” 就用那1byte来在内存中占用不同地址了。:)
又因为这些空class没有赋值的意义,所以就没必要占用更多内存。

网友(2):

普通的空类大小是1。如果有虚继承,则子类的大小会是4。

如下:

#include
using namespace std;

class A{};
class B : public A{};
class C : virtual public A{};

int main()
{
    cout<< sizeof(A)<        << sizeof(B)<        << sizeof(C)<
    return 0;
}

网友(3):

这个问题有些奇葩,比如
class A
{};
class B
{char c;};
A是1,B也是1...那个1个字节只是让编译器识别不同的类用的......gcc 4.8测试...

另外加上虚继承的话情况更复杂,像missgya的例子,在我的机子上测试是C是8字节,也就是一个指向虚表的指针的大小,是操作系统相关的

网友(4):

空类(除了静态数据成员,没有任何其他数据成员的类)占一个字节

网友(5):

记得只能保证一定不是0。
通常情况下会是1,但是没有这个限制,所以最好不要依赖这个1来编写程序。