我应该如何数字

How should I numerate my enum?

本文关键字:数字 何数字 我应该      更新时间:2023-10-16

通常,当我创建一个枚举时,他们每个人都会被一个人递增,请参见

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

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

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

我明白这意味着什么,但是这到底给了我什么?有任何优势吗?我只看到这使我认为它看起来不确定性。

第二个形式创建用于在bitmask中使用的标志。通常是为了在具有多种布尔条件的对象中节省空间可以控制其行为。

struct foo {
    std::uint32_t bitmask; // up to 32 different flags.
};
foo obj;
obj.bitmask = (B | D); // Sets the bits 0 and 2 

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

如果您只想要未合并的唯一枚举值,则第一个版本是完全可以的。而且,您实际上不必将= 0用于第一个值。无论如何,那将是默认的。