返回信息流#include <iostream>
using namespace std;
class A{};
class D:virtual public A {};
class G {int a;};
class B{};
class C:public A,public B {};
class E: public D, public B{};
class F: virtual public A, public B {};
class X:public G,public B {};
int _tmain(int argc, _TCHAR* argv[])
{
cout<<sizeof(C)<<endl;
cout<<sizeof(E)<<endl;
cout<<sizeof(F)<<endl;
cout<<sizeof(X)<<endl;
return 0;
}
结果:1 8 4 4
想问下,第2个:sizeof(E)为什么是8?
这是一条镜像帖。来源:北邮人论坛 / cpp / #71689同步于 2013/6/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
有关类的大小
lcb
2013/6/8镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
d大小为4,因为有一个vptr,指向vtable来虚继承a。
b大小为1。
e继承了b,d,内部结构应该是4字节d的部分,加上1字节b的部分,共5字节。对齐之后最终就是8字节。
对于sizeof(E)确实不见得一定是8~MinGW-gcc得到的结果就是4。
另外ByteAlign也有说道~如果一定要讲ByteAlign这个问题的话,是要和处理器制式对应来谈的~当然说这也是编译器决定的问题也不能算错误~毕竟编译器也是根据芯片的指令集标准来设计的
【 在 nuanyangyang 的大作中提到: 】
: 直觉告诉我这也是不确定的,随编译器而变的。