我正在尝试理解位域(bitfields)。下面的示例来自C++在线文档。
#include <iostream>
struct S {
// will usually occupy 2 bytes:
// 3 bits: value of b1
// 2 bits: unused
// 6 bits: value of b2
// 2 bits: value of b3
// 3 bits: unused
unsigned char b1 : 3, : 2, b2 : 6, b3 : 2;
};
int main()
{
std::cout << sizeof(S) << '\n'; // usually prints 2
}
这个例子让我困惑的是,在代码上面的注释中,它说在b1:3之后有2个未使用的比特。然后在b3:2之后有3个未使用的比特。为什么?不应该是unsigned char类型中定义的比特数吗?或者是到下一个分配单元边界还剩余的未使用比特数?