C ++ 11非固定枚举值?

时间:2013-05-24 13:53:19

标签: c++ c++11

在C ++ 11 7.2.7中它说:

  

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

我不明白它在这里定义了什么。可能值[b_maxb_min]的范围与枚举器[b_maxe_min]的范围有何不同?

也许一个例子有助于特定的枚举定义和e_maxe_mine_maxb_min的计算?

1 个答案:

答案 0 :(得分:4)

在C ++中,您可以使用枚举作为位掩码。

例如:

enum Flag {
    Read = 1 << 0,
    Write = 1 << 1,
    WithSugar = 1 << 2
};

然后你可以说:Flag f = Read | Write | WithSugar;f的值已经完美定义:assert(f == 7);

它继承自C ......

在我们的案例中,规则规定Flag应该能够将0(枚举为正,除非存在负面枚举数)的任何值表示为7

7取决于获取最大的枚举数(WithSguar:4)并查找k以使2^(k-1) <= 4 < 2^k - 1。然后,最大可表示值为2^k-1。如果你考虑二元补码中的值的按位表示是有意义的:4100所以你可以用00填充1而不占用更多空间, 111为最大值,恰好为7