6

の値が適切なサイズの整数型にキャストされたかのstd::less<MyEnumType>ように注文する標準保証はありますか?MyEnumTypeMyEnumType

enum MyEnumType { E1 = 0, E2 = 6, E3 = 3 };
4

2 に答える 2

6

はい、std::less::operator()次のように定義されています (§20.8.5/5):

operator()戻り値x < y

列挙型で関係演算子を使用する場合、次のように規定されています (§5.9/2)。

通常の算術変換は、算術型または列挙型のオペランドに対して実行されます。

スコープのない列挙型の場合、通常の算術変換は整数昇格を行うものとして定義されます。スコープのない列挙型の整数昇格は (§5/9) として定義されます。

基になる型が固定されていない (7.2) スコープのない列挙型の prvalue は、列挙のすべての値 (つまり、b minから bの範囲の値) を表すことができる次の型の最初の型の prvalue に変換できます。 7.2 で説明されている最大値int): 、unsigned intlong intunsigned long intlong long int、またはunsigned long long int

利用可能で必要な場合は、拡張整数型が使用されます。

于 2012-12-06T18:53:30.867 に答える
3

列挙型の型は、列挙型のすべての値を保持するのに十分な大きさの整数型として定義されます。コンパイラは具象型が何であるかを決定することができます (ただし、これを制御する方法はあります)。ただし、型は間違いなく整数型です。つまり、同じ列挙型の 2 つの値に対する比較演算子は、期待どおりに動作します。

于 2012-12-06T18:53:01.853 に答える