0

最近在看《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???还是我理解错了???

aktang 14
2019-10-10 提问

1 个回答

1

已采纳
网上资料中对它的描述是它会强制下一字段会对齐到下一字段的type边界

哪的描述?你确认是 type 不是 byte ?

宽度为0的会强制下一个从一个新的字节开始。而这里 bc 都只需要一个字节就可以放得下了。加上 padding ,最后的大小是 8 。

推广链接