最近在看《C++ Primer Plus 6》,在4.4.6章节中简短粗略的介绍了如何定义、初始化位字段和提供了位字段简单应用的实例。看完之后于是去百度一下,在查看相关信息后存在如下疑惑:
struct BF_1{
unsigned int a;
char b : 2;
char : 0;
unsigned char c : 8;
};
sizeof (BF_1); // 8
在BF_1中出现了无字段名且宽度为0的位字段成员,网上资料中对它的描述是它会强制下一字段会对齐到下一字段的type边界。我的理解是如果是这样为何sizeof (BF_1)结果不是12而是8???还是我理解错了???
哪的描述?你确认是 type 不是 byte ?
宽度为0的会强制下一个从一个新的字节开始。而这里
b
和c
都只需要一个字节就可以放得下了。加上 padding ,最后的大小是 8 。