1

C++11 7.2.7 では、次のように書かれています。

e_minが最小の列挙子であり、最大の列挙型 [基になる型が固定されていない] の場合e_max、列挙型の値は、次のようb_minb_max定義される範囲内の値です... [省略]

ここで何を定義しているのかわかりません。可能な値の範囲 [ , ] と列挙子の範囲 [ , ] はどのように区別b_minb_maxれますか?e_mine_max

e_minおそらく、特定の列挙定義と、e_maxb_minおよびb_max?の計算の例が役立つ可能性があります。

4

1 に答える 1

4

C++ では、列挙型をビットマスクとして使用できます。

例えば:

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

次に、次のように言うことができます:Flag f = Read | Write | WithSugar;そしてfの値は完全に定義されています: assert(f == 7);!

それはCから継承されています...

私たちの場合、ルールは が(負の列挙子が存在しない限り、列挙は正です)Flagから までの任意の値を表すことができるべきであると述べています。07

7は、最大の列挙子 ( : 4) を取得し、そのようなものをWithSguar探すことによって決定されます。その場合、表現可能な最大値はです。2 の補数での値のビット単位の表現を考慮すると、それは理にかなっています: is は、より多くのスペースを取らずにwithを埋めることができ、たまたま である最大値として与えることができます。k2^(k-1) <= 4 < 2^k - 12^k-141000011117

于 2013-05-24T14:04:19.390 に答える