在 C++11 7.2.7 中它说:
对于枚举[具有非固定基础类型],其中
e_min
是最小的枚举数并且e_max
是最大的,枚举的值是定义如下范围内的值... [snipb_min
]b_max
我不明白它在这里定义了什么。可能值 [ b_min
, b_max
] 的范围与枚举数 [ e_min
, e_max
] 的范围有何不同?
也许一个例子可以帮助特定的枚举定义和计算e_min
,e_max
和?b_min
b_max
在 C++ 中,您可以使用枚举作为位掩码。
例如:
enum Flag {
Read = 1 << 0,
Write = 1 << 1,
WithSugar = 1 << 2
};
然后你可以说:Flag f = Read | Write | WithSugar;
andf
的值是完美定义的:assert(f == 7);
!
继承自C...
在我们的例子中,规则说Flag
应该能够表示从0
(枚举为正,除非存在负枚举)到 的任何值7
。
该值7
是通过取最大的枚举数 ( WithSguar
: 4) 并寻找k
这样来确定的2^(k-1) <= 4 < 2^k - 1
。那么最大可表示值是2^k-1
。4
如果您考虑 2-complement: is中值的按位表示,这是有道理的,这样您就可以在不占用更多空间的情况下100
填充00
1
111
7