bit field
是位域
的意思. 位域
是类似于 sruct
和 union
的自定义数据结构. 位域
一般用于需要节省内存使用的场景(网络协议), 能够将结构体
成员的范围限制在 bit
级别, 而不是基本类型:int, bool, char等级别.
需要注意以下几点:
- 位域的内存布局与平台相关, 移植可能存在问题.
- 位域的类型必须是整型或枚举类型, 带符号类型是未定义的.
- 位域不能进行寻址.
- 位域成员不能跨越两个类型.
下面直接看一个例子:
#include <iostream>
struct bitfield {
unsigned short m_a : 1, m_b : 2, m_c : 3, : 5, m_d : 5;
};
int main(void) {
bitfield bf = {
.m_a = 1,
.m_b = 1,
.m_c = 1,
.m_d = 1,
};
std::cout << sizeof(bitfield) << std::endl; // 输出:2
}
上面定义了 m_a...m_d
四个成员, 和一个匿名成员
作为占位符. 如果觉得有帮助, 可以扫描右边的微信打赏码支持一下.