是否应该是提到的类的 12 大小?

Is should be 12 size of mentioned class?

本文关键字:大小 是否      更新时间:2023-10-16

请分享您对此的看法:

class A
{
union {
unsigned int _dummy_drc[2];
struct {
unsigned int _trans_drc :1;
unsigned int _cap_drc :1;
unsigned int _fanout_drc :1;
unsigned int _trans_drc_index :10;
unsigned int _cap_drc_index :10;
unsigned int _fanout_drc_index :10;
};
};
};

应该是12吗,为什么?

应该是提到的类的 12 大小吗?[原文如此]

结构的大小取决于许多依赖于平台的东西。例如,它取决于(unsigned)int的大小。在某些系统上,它可能是 1,而在另一个系统上它可能更多。它还取决于位字段是否"跨越"多个基础对象。在某些系统上可以,而在另一些系统上则不会。

_dummy_drc的大小是2 * sizeof(int),所以类的大小至少是2。

sizeof(int) == 4和位字段不跨越多个对象并且字段从左到右分配的系统上,CHAR_BIT == 8,包含类的预期大小(匿名结构,因此是联合,因此)是 8:

|1 |2 |3 |4 |5 |p |6 |p     field position, p stands for padding
|1 |1 |1 |10|10|8 |10|22    field bits
|1 |2 |3 |13|23|32|10|32    cumulative bits since start of object
|1                |2        underlying integer position

附言。联合在C++中格式不正确,因为它包含一个匿名成员类。