据我所知,C ++中类的大小取决于以下因素:
- 所有非静态数据成员的大小。
- 数据成员的顺序。
- 是否启用字节填充。
- 其直接基类的大小。
- 虚拟功能的存在。
- 继承方式(虚拟继承)。
现在,我创建了两个类,如下所示:
class A{
int a;
short s;
int b;
char d;
};// kept a char at last on purpose to leave a "hole"
class B : public A{
char c;
};
现在检查A和BI的大小,请参见
- A的大小:16
- B的大小:16
我的假设是B类中的字符c容纳在A类中剩余的“空洞”中。
但是,令我感到困惑的是以下情况,其中我将成员公开
class A{
public:
int a;
short d;
int b;
char s;
};
class B : public A{
public:
char c;
};
现在大小变成
- A的大小:16
- B的大小:20
我似乎无法理解这种差异的原因。
1
为什么C ++中类的大小取决于数据成员的公共/私有状态?-不是。这些是依赖于编译器的实现细节。
—
PaulMcKenzie
那么,您使用的是什么编译器?
—
罗曼
@PaulMcKenzie确实如此。该标准将具有相同访问权限的成员分组在一起,因此进行更改将更改编译器的填充策略。
—
NathanOliver
@ NathanOliver-ReinstateMonica,我不知道。您是否有机会参考相关部分?
—
R Sahu
@RSahu现在抬起头来回答我的问题。
—
NathanOliver