我如何专门用于以下目的

How can I use Bitfields specifically for the following purpose

本文关键字:用于 何专门      更新时间:2023-10-16

为了学习有效的内存管理,我想知道如何使用单个位字段集体表示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的第一行:

声明A 类数据成员具有显式大小[...]

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

#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;
    }
}