64,639
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <stdio.h>
using namespace std;
class X{};
class Y: public virtual X{};
class Z: public virtual X{};
class A: public Y, public Z{};
int main()
{
printf("Y:%d Z:%d A:%d\n", sizeof(Y), sizeof(Z), sizeof(A));
return 0;
}
c:\demo>type demo.cpp
#include <stdio.h>
using namespace std;
class X{};
class Y: public virtual X{};
class Z: public virtual X{};
class FooBar: public Y, public Z{};
int main()
{
printf("Y:%d Z:%d A:%d\n", sizeof(Y), sizeof(Z), sizeof(FooBar));
return 0;
}
c:\demo>cl /nologo /W4 /EHsc /d1reportSingleClassLayoutFooBar demo.cpp
demo.cpp
class FooBar size(8):
+---
| +--- (base class Y)
0 | | {vbptr}
| +---
| +--- (base class Z)
4 | | {vbptr}
| +---
+---
+--- (virtual base X)
+---
FooBar::$vbtable@Y@:
0 | 0
1 | 8 (FooBard(Y+0)X)
FooBar::$vbtable@Z@:
0 | 0
1 | 4 (FooBard(Z+0)X)
vbi: class offset o.vbptr o.vbte fVtorDisp
X 8 0 4 0
c:\demo>demo
Y:4 Z:4 A:8
c:\demo>