面试题答案
一键面试- 空类默认大小:
- 空类默认大小是1字节。
- 原因是:C++ 要求每个对象都必须有独一无二的地址。如果空类大小为0,那么多个空类对象的地址将相同,这不符合C++ 的内存模型规则。所以编译器会为其分配1字节,以确保每个空类对象都有唯一的内存地址。
- 添加虚函数后类大小的变化:
- 当在空类中添加一个虚函数时,类的大小会变为4字节(在32位系统下)或8字节(在64位系统下)。
- 原因是:当类中包含虚函数时,编译器会为该类生成一个虚函数表(vtable),并在每个对象中添加一个指向虚函数表的指针(vptr)。在32位系统下,指针大小为4字节;在64位系统下,指针大小为8字节,所以类的大小相应变为4字节(32位系统)或8字节(64位系统)。