结构体和类的不同大小(),彼此具有相同的字段类型

Different sizeof() of struct and class with the same field types in each other

本文关键字:类型 字段 结构体      更新时间:2023-10-16

我已经知道,在结构中,字段之间有填充,整个结构的大小取决于它们的顺序或类似的东西。 但是它对类的工作方式相同吗?

我有一些结构,例如:

typedef struct {
char *b;
int s;
} class_t;

我还有一个具有相同字段的类:

class Class{
private:
char *m_buf;
int m_size;
};

问题是:为什么sizeof(class_t(给出16个字节,而sizeof(Class(给出12个字节?

12 这个数字很可疑。它的大小有点奇怪,告诉我编译器正在对布局做一些时髦的事情。

既然你提到了 GCC,我想结构打包已经在该类上启用,要么通过__attribute__((packed))(很可能在宏中(,要么以某种方式通过pack()编译指示。

您可以在此处看到此行为的实际效果:https://gcc.godbolt.org/z/XEkH7f

除了structclass具有不同的默认访问规范和不同的默认继承(publicvsprivate(之外,class和结构是完全相同的。