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四个成员,和一个匿名成员作为占位符。