6

我正在测试 C++ 中基类和派生类的大小。

class X {}; 
class Y : public virtual X {}; 
class Z : public virtual X {}; 
class A : public Y, public Z {};

每个 X、Y、Z、A 的大小分别为 1、8、8、12。我无法理解这一点。我知道空类的默认大小是 1。所以我可以理解 X 的大小是 1。我知道 Y 和 Z 的大小不会因为会添加 virtual_pointer。但是8?我不明白这个。有人可以解释一下吗?

4

1 回答 1

2

这取决于编译器中的实现。比如说,我在 GCC 上得到了 1、8、8、16。

对于Y类,它可以为虚拟基创建一个 vtable,X并为空类主体创建 1 个字节。4字节对齐后,总共8字节。

UPD:也可能取决于您是针对 32 位还是 64 位架构进行编译。64 位平台上的 vtable 指针将占用 8 个字节,因此 Y 和 Z 的大小。

因此,您问题的完整答案取决于编译器和目标平台。

于 2013-10-01T04:18:05.460 回答