Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我应该如何计算我的枚举数?_C++_Enums - Fatal编程技术网

C++ 我应该如何计算我的枚举数?

C++ 我应该如何计算我的枚举数?,c++,enums,C++,Enums,通常,当我创建一个枚举时,每个枚举都会递增一,请参见 enum { A = 0, B, C, D }; 但在我研究了一些源代码之后,我看到人们在做这样的事情 enum { A = 0, B = 1 << 0, C = 1 << 1, D = 1 << 2 }; enum { A=0, B=1第二种形式创建用于位掩码的标志。通常这样做是为了在具有多个布尔条件的对象中节省空间,这些布尔条件控制对象

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

enum
{
    A = 0,
    B,
    C,
    D
};
但在我研究了一些源代码之后,我看到人们在做这样的事情

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

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

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
也是flag您不应该为其分配
0
,以便稍后可以测试其表示位(
0
当然没有位)。