class X {};
class Y : public virtual X{};
class Z: public virtual X{};
class A:public Y, public Z{};
void test_sizeof_class() {
size_t temp = sizeof(X);
temp = sizeof(Y);
temp = sizeof(Z);
temp = sizeof(A);
}
请问 sizeof 分别的结果是多少?说出理由哦
1
wutiantong 2018-10-24 15:34:27 +08:00
X 是 1,Y&Z 是 8,A 是 Y+Z。
如果去掉 virtual,Y&Z 是 1,A 还是 Y+Z。 运行结果告诉我的。。。 |
2
coordinate 2018-10-24 16:05:07 +08:00
编译器行为,空类为 1,虚继承中添加了虚指针。
|
3
innoink 2018-10-24 16:10:50 +08:00 via Android
虚基类指针
|
4
SeaRecluse 2018-10-24 16:11:49 +08:00
能不能先把空格对齐了,看着好难受:(
|
5
yanjusong 2018-10-24 16:17:58 +08:00
msvc120 下结果:
sizeof(X)=1 sizeof(Y)=4 sizeof(Z)=4 sizeof(A)=8 class X size(1): +--- +--- class Y size(4): +--- 0 | {vbptr} +--- +--- (virtual base X) +--- class Z size(4): +--- 0 | {vbptr} +--- +--- (virtual base X) +--- class A size(8): +--- | +--- (base class Y) 0 | | {vbptr} | +--- | +--- (base class Z) 4 | | {vbptr} | +--- +--- +--- (virtual base X) +--- |
8
liberize 2018-10-24 18:13:06 +08:00 1
|
9
jiang42 2018-10-24 18:24:39 +08:00 via iPhone
觉得是 UB 吧……有没有精通标准的大佬出来指点一下
|