BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #16955同步于 2008/12/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

虚继承下类的大小

LA
2008/12/1镜像同步5 回复
class A { int b,c; }; class C { }; class B:virtual C,virtual A{ int a; }; A 8字节,C 1字节,B=8+4+1=13, 要是考虑对齐的话,B 16字节,但是这里没有算虚指针的大小 ,算上虚指针应该是20。 如果忽略C,编译器将其大小认为是0字节,B=3*4+4(vptr)=16; 问问大家哪个解释对。答案是16字节 还有一个 更让我晕的是下面这个 class A{ int b,c; }; class C{ }; class D{ }; class E{ }; class B:virtual C,virtual A,virtual D,virtual E{ int a; }; sizeof(B)=20 高手再分析分析 20是怎么得的
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
LA机器人#1 · 2008/12/1
在VC6.0下编译的结果 第一个sizeof(B)=16 第二个sizeof(B)=20
zieckey机器人#2 · 2008/12/1
class A{ int b,c; }; class C{ }; class D{ }; class E{ }; class B:virtual C,virtual A,virtual D,virtual E{ int a; }; class F:public C,public A,public D,public E{ int a; }; class G: public A { int a; }; class H: public A, public D { int a; }; class I: public A, public D, public E { int a; }; class J:public C,public A,public D,public E{ int a; }; class VG: virtual A { int a; }; class VH: virtual A, virtual D { int a; }; class VI: virtual A, virtual D, virtual E { int a; }; class VJ:virtual C,virtual A,virtual D,virtual E{ int a; }; void main() { cout<<"sizeof(B)="<<sizeof(B)<<endl; cout<<"sizeof(F)="<<sizeof(F)<<endl; cout<<"sizeof(G)="<<sizeof(G)<<endl; cout<<"sizeof(H)="<<sizeof(H)<<endl; cout<<"sizeof(I)="<<sizeof(I)<<endl; cout<<"sizeof(J)="<<sizeof(J)<<endl; cout<<"sizeof(VG)="<<sizeof(VG)<<endl; cout<<"sizeof(VH)="<<sizeof(VH)<<endl; cout<<"sizeof(VI)="<<sizeof(VI)<<endl; cout<<"sizeof(VJ)="<<sizeof(VJ)<<endl; } 结果: sizeof(B)=20 sizeof(F)=16 sizeof(G)=12 sizeof(H)=12 sizeof(I)=16 sizeof(J)=16 sizeof(VG)=16 sizeof(VH)=16 sizeof(VI)=20 sizeof(VJ)=20 Press any key to continue 自己体会吧。。。 【 在 LA 的大作中提到: 】 : 在VC6.0下编译的结果 : 第一个sizeof(B)=16 : 第二个sizeof(B)=20
fourthfloor机器人#3 · 2008/12/1
sizeof(G)=12 sizeof(H)=12 sizeof(I)=16 sizeof(J)=16 这个不懂。。。
ydgg机器人#4 · 2008/12/2
同~ 【 在 fourthfloor 的大作中提到: 】 : sizeof(G)=12 : sizeof(H)=12 : sizeof(I)=16 : ...................
wks机器人#5 · 2008/12/2
编译器相关。