如何为枚举类型添加数字编号?

4

通常情况下,当我创建一个枚举时,它们会按顺序递增1,例如

enum
{
    A = 0,
    B,
    C,
    D
};

但是,通过查看一些源代码,我发现人们会做类似这样的事情:

enum
{
    A = 0,
    B = 1 << 0,
    C = 1 << 1,
    D = 1 << 2
};

我知道这句话的意思,但是它实际上给了我什么?有什么好处吗?我只觉得这让它看起来不必要地复杂。

2
该枚举中最有可能的项被用作某种标志,通过按位操作混合在一起。 - Jaa-c
1
请注意,如果A也是一个标志位,您不应该将其赋值为0,以便稍后测试其表示位(当然,0没有位)。 - Tamir Vered
2个回答

7
第二种形式创建用于位掩码的标志。通常在具有多个布尔条件控制其行为的对象中使用,以节省空间。
struct foo {
    std::uint32_t bitmask; // up to 32 different flags.
};

foo obj;
obj.bitmask = (B | D); // Sets the bits 0 and 2 

5
它创建了一个带有唯一位设置的位掩码类型,这样表达式B | C就不会与D相同。

如果您只想要不组合的唯一枚举值,则第一个版本完全可以。你不必使用=0作为第一个值,因为那将是默认值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接