结构体和类的不同大小(),彼此具有相同的字段类型
Different sizeof() of struct and class with the same field types in each other
我已经知道,在结构中,字段之间有填充,整个结构的大小取决于它们的顺序或类似的东西。 但是它对类的工作方式相同吗?
我有一些结构,例如:
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
除了struct
和class
具有不同的默认访问规范和不同的默认继承(public
vsprivate
(之外,class
和结构是完全相同的。
相关文章:
- 将结构字段的类型展开为可变模板参数
- 结构体和类的不同大小(),彼此具有相同的字段类型
- 错误:字段'dateOfBirth'的类型不完整'Poco::Data::Date'
- 获取具有字段名称的 SELECT 字段类型,并带有 MariaDB C++连接器
- 无法初始化以 std::byte 作为成员类型的位字段
- 无法访问 Arduino 结构字段。错误"退出状态 1。xxxx 不命名类型"
- 在这种情况下,如何从类型 "const char*" 初始化字段?
- 确定输入"conscalc: calc"的类型时出错。不能联合编码器。具有不同字段集的结构类型
- 字段在正向声明中具有不完整的类型
- 使用固定大小类型时强制对位字段(C++14 之前)进行签名
- 返回对位字段的访问类型
- 将枚举类型保存在位字段 [dcl.enum] [class.bit] 中
- 将指向结构的指针转换为具有较少字段数的另一种结构类型
- 位字段成员的类型
- 无法汇总初始化类型结构的变量,其中包含在类模板中的位字段成员
- 在相同类型的字段上迭代
- Boost Xpressive-字段“ M_RX”具有不完整的类型
- 设计具有变体字段的文本类型类,其中可以存储一个或三个对象
- 自动复制=按值并支持多态性的适当类型的非静态字段
- 在std::set/std::map中存储具有多个不同类型字段的c++对象的有效方法