为了学习有效的内存管理,我想知道如何使用单独的位字段来共同表示 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/