我应该如何计算我的枚举?

ano*_*non 4 c++ enums

通常,当我创建一个枚举时,每个都会增加1,请参阅

enum
{
    A = 0,
    B,
    C,
    D
};
Run Code Online (Sandbox Code Playgroud)

但在我查看了一些源代码之后,我看到人们在做这样的事情

enum
{
    A = 0,
    B = 1 << 0,
    C = 1 << 1,
    D = 1 << 2
};
Run Code Online (Sandbox Code Playgroud)

我明白这意味着什么,但这究竟是什么让我受益?有什么好处吗?在我看来,我只看到这使得它看起来不必要.

Sto*_*ica 7

第二种形式创建用于位掩码的标志.通常这样做是为了在具有几个控制其行为的布尔条件的对象中节省空间.

struct foo {
    std::uint32_t bitmask; // up to 32 different flags.
};

foo obj;
obj.bitmask = (B | D); // Sets the bits 0 and 2 
Run Code Online (Sandbox Code Playgroud)


Bo *_*son 5

它创建了一个具有唯一位设置的位掩码类型,因此B | C保证表达式不相同D.

如果您只想要未组合的唯一枚举值,则第一个版本完全可以.而且你真的不必使用= 0第一个值.无论如何,这将是默认值.