C++ bool数组为bitfield?

Mat*_*Mat 4 c++ struct boolean bit-fields

假设我需要在结构中存储8个bool,但是我想一起使用它们只有1个字节,那么我可以这样做:

struct myStruct {
    bool b1:1;
    bool b2:1;
    bool b3:1;
    bool b4:1;
    bool b5:1;
    bool b6:1;
    bool b7:1;
    bool b8:1;
};
Run Code Online (Sandbox Code Playgroud)

有了这个我可以做的事情

myStruct asdf;
asdf.b3=true;
asdf.b4=false;
if(asdf.b1)
    ...
Run Code Online (Sandbox Code Playgroud)

到目前为止这是正确的吗?(我实际上并不知道,我之前从未使用过bitfields)

好的 - 但是也可以创建一个8个bool的静态数组,这样它们只能使用8位但是我仍然可以通过索引来加入它们吗?

就像是

struct myStruct {
public:
    bool b[8]:8;
};
Run Code Online (Sandbox Code Playgroud)

也许?(有了这个,我得到一个错误C2033)

谢谢您的帮助!

Dan*_*ook 10

我建议使用std::bitset 那样你可以简单地声明:

std::bitset<8> asdf;
Run Code Online (Sandbox Code Playgroud)

并与[]一起使用.

asdf[0] = true;
asdf[3] = false;
Run Code Online (Sandbox Code Playgroud)

  • 如果我的研究是正确的,bitset至少使用4个字节 (2认同)