【发布时间】:2021-05-08 04:46:03
【问题描述】:
除了有符号或无符号之外,类型对位域有多大影响(如果有的话)?
例如有什么区别:
unsigned char a : 3;
std::uint64_t b : 3;
我猜只要位域不大于类型,没关系。
【问题讨论】:
-
它影响它声明的结构或类的大小:godbolt.org/z/1broTWxsY
-
a需要 1 个字节,b需要 8 个字节。 -
它是实现定义的。它可能会影响用于位域的分配单元大小,也可能不会。
-
它是实现定义的,它如何影响包含类型的布局。但是,在您的示例中访问
yourbitfield.a的值(其中yourbitfield是包含您描述的两个位文件的类型的实例)将产生unsigned char的结果,访问yourbitfield.b将产生类型的结果std::uint64_t。所以x = yourbitfield.a将把字段a提取为unsigned char,并将其提升为x的类型以完成分配。
标签: c++ bit-fields