c++ - 我如何专门为以下目的使用位域

标签 c++ bit-fields

为了学习有效的内存管理,我想知道如何使用单独的位字段来共同表示 8 个 bool 值的值,以及如何评估和设置每个位。

原因在我自己的程序里,我不会粘贴,因为有几千行。 在类全局范围内,有一百多个,bool都需要,这对FPS影响很大。

例子:

       uint8_t b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1;

       if (!b0) { 
       // do something
       b0 = true; 
       }

最佳答案

只能为数据成员指定位域。从 http://en.cppreference.com/w/cpp/language/bit_field 的第一行开始:

Declares a class data member with explicit size [...]

您需要将您的位字段包装在一个结构中。示例:

#include <cstdint>
struct bool_pack {
    uint8_t b0 : 1, b1 : 1, b2 : 1, b3 : 1, b4 : 1, b5 : 1, b6 : 1, b7 : 1;
};

int main()
{
    bool_pack b = {};

    if (!b.b0) {
        // do something
        b.b0 = true;
    }
}

有一个更方便的标准库类型std::bitset你应该考虑使用。示例:

#include <bitset>
int main()
{
    std::bitset<8> b;

    if (!b[0]) {
        // do something
        b[0] = true;
    }
}

关于c++ - 我如何专门为以下目的使用位域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43769135/

相关文章:

c - 为什么打包不能跨同级 union 或结构工作

c - 为什么通过引用写入 bitfield-uint union 会产生错误的汇编指令?

c++ - 更大字符串的最长公共(public)子序列?

c++ - DFS 访问者不会遍历分离的顶点

c++ - 什么是 undefined symbol : X509_EXTENSION_free?

c - sizeof 没有显示预期的输出

serialization - 如何反序列化非标准大小的字段?

位域的概念

c++ - 用 Go 编写的音频库?

c++ - 使用多个类、额外的预先存在的 .a 库和其他依赖项制作库