请帮忙解释两道数据对齐问题的结果

woaiyu_liang 2008-10-08 01:45:55
请帮忙解释以下两个程序的结果(编译环境为VC6.0)

//程序一
#include <iostream>
using namespace std;

class A
{
public:
void foo()
{
cout<<"A"<<endl;
}
char a;
};
class B :virtual public A
{
public:
void fool()
{
cout<<"B"<<endl;
}
int b;
};

class C:virtual public A
{
public:
void fooll()
{
cout<<"C"<<endl;
}
int c;
};
class D:public B, public C
{
public:
void foolll()
{
cout<<"D"<<endl;
}
int d;
};
int main()
{
A aa;
B bb;
C cc;
D dd;
cout<<sizeof(aa)<<"\t"<<sizeof(bb)<<endl;
cout<<sizeof(cc)<<"\t"<<sizeof(dd)<<endl;
system("pause");
return 0;
}
//输出结果为1 9 9 21
//请解释:

//程序二
#include <iostream>
using namespace std;

class A
{
public:
void foo()
{
cout<<"A"<<endl;
}
char a;
int b;
};

int main()
{
A aa;
cout<<sizeof(aa)<<endl;
system("pause");
return 0;
}
//输出结果为8
//请解释:
...全文
86 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
woaiyu_liang 2008-10-08
  • 打赏
  • 举报
回复
不完全是数据对齐的问题?那是什么问题?
既然是由编译器发挥,总有一个发挥原则吧?请告知。
redleaves 2008-10-08
  • 打赏
  • 举报
回复
这没什么可解释的,不完全是数据对齐的问题.标准没有要求类的布局,这个可以由编译器自己来发挥.

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧