通常情况下,当我创建一个枚举时,它们会按顺序递增1,例如
enum
{
A = 0,
B,
C,
D
};
但是,通过查看一些源代码,我发现人们会做类似这样的事情:
enum
{
A = 0,
B = 1 << 0,
C = 1 << 1,
D = 1 << 2
};
我知道这句话的意思,但是它实际上给了我什么?有什么好处吗?我只觉得这让它看起来不必要地复杂。
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
作为第一个值,因为那将是默认值。
A
也是一个标志位,您不应该将其赋值为0
,以便稍后测试其表示位(当然,0
没有位)。 - Tamir Vered