只是出于好奇,如果我有一个带有位字段的结构
struct Foo
{
char a : 1;
char b : 1;
char c : 1;
}
Run Code Online (Sandbox Code Playgroud)
另一个带有位域和 struct Foo 的结构
struct Bar
{
Foo foo;
char a : 1;
char b : 1;
char c : 1;
}
Run Code Online (Sandbox Code Playgroud)
所有这些位都会被打包成一个整数吗?
在这种情况下,这些字段是否会被重新排序以形成单个位字段?
struct Baz
{
char a : 1;
int NotBitfield;
char b : 1;
char c : 1;
}
Run Code Online (Sandbox Code Playgroud) 简短版本是:如何学习c ++字段的单个字段的大小(以位为单位)?
澄清一下,我所谈论的领域的一个例子:
struct Test {
unsigned field1 : 4; // takes up 4 bits
unsigned field2 : 8; // 8 bits
unsigned field3 : 1; // 1 bit
unsigned field4 : 3; // 3 bits
unsigned field5 : 16; // 16 more to make it a 32 bit struct
int normal_member; // normal struct variable member, 4 bytes on my system
};
Test t;
t.field1 = 1;
t.field2 = 5;
// etc.
Run Code Online (Sandbox Code Playgroud)
我们只是说,要获得整个Test对象的大小很简单
sizeof(Test); // returns 8, for 8 …Run Code Online (Sandbox Code Playgroud)