返回信息流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是怎么得的
这是一条镜像帖。来源:北邮人论坛 / cpp / #16955同步于 2008/12/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
虚继承下类的大小
LA
2008/12/1镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
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 的大作中提到: 】
: sizeof(G)=12
: sizeof(H)=12
: sizeof(I)=16
: ...................