C++笔记 - bit field

1,293 阅读1分钟

bit field位域的意思。位域是类似于sructunion的自定义数据结构。位域一般用于需要节省内存使用的场景(网络协议),能够将结构体成员的范围限制在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四个成员,和一个匿名成员作为占位符。