为了学习有效的内存管理,我想知道如何使用单独的Bit字段来统一表示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;
}
答案 0 :(得分:2)
只能为数据成员指定位字段。从http://en.cppreference.com/w/cpp/language/bit_field的第一行开始:
使用显式大小[...]
声明类数据成员
您需要将位字段包装在结构中。示例:
#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;
}
}