1

在 C++11 7.2.7 中它说:

对于枚举[具有非固定基础类型],其中e_min是最小的枚举数并且e_max是最大的,枚举的值是定义如下范围内的值... [snip b_min]b_max

我不明白它在这里定义了什么。可能值 [ b_min, b_max] 的范围与枚举数 [ e_min, e_max] 的范围有何不同?

也许一个例子可以帮助特定的枚举定义和计算e_min,e_max和?b_minb_max

4

1 回答 1

4

在 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-14如果您考虑 2-complement: is中值的按位表示,这是有道理的,这样您就可以在不占用更多空间的情况下100填充0011117

于 2013-05-24T14:04:19.390 回答