C++中“位字段”的一些疑惑

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

阅读 1.8k
1 个回答
网上资料中对它的描述是它会强制下一字段会对齐到下一字段的type边界

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题