我正在使用C++中的基类和派生类的大小进行测试.
class X {};
class Y : public virtual X {};
class Z : public virtual X {};
class A : public Y, public Z {};
Run Code Online (Sandbox Code Playgroud)
每个X,Y,Z,A的大小分别为1,8,8,12.我无法理解这一点.我知道空类的默认大小是1.所以我可以理解X的大小是1.我知道Y和Z的大小不会,因为会添加virtual_pointer.但8?我不懂.有人可以解释一下吗?
这取决于您的编译器中的实现。假设我在 GCC 上得到了 1, 8, 8, 16。
对于Y类,它可以为虚拟基创建一个vtable X,并为空类体创建1个字节。4字节对齐后,总共8字节。
UPD:这也可能取决于您是针对 32 位架构还是针对 64 位架构进行编译。64 位平台上的 vtable 指针将占用 8 个字节,因此 Y 和 Z 的大小也是如此。
因此,您问题的完整答案取决于编译器和目标平台。
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |