列挙型定数

列挙データ型を定義するときは、列挙データ型が表す ID のセットを 指定します。このセットの各 ID は、列挙型定数 です。

定数の値は、次の方法で判別されます。

  1. 列挙型定数の後の等号 (=) と定数式によって定数に明示値が 与えられます。ID は、定数式の値を表します。
  2. 明示値を割り当てられない場合は、リストの左端の定数がゼロ (0) の値を受け取ります。
  3. 明示的に割り当てられた値がない ID は、前の ID で表される値よりも 1 つ大きい整数値を受け取ります。

C C では、列挙型定数に int 型があります。定数式が初期化指定子として 使用されている場合、式の値は int の範囲を超えることはできません (すなわちヘッダー <limits.h> に定義されているように、INT_MININT_MAX となります)。

C++ C++ では、各列挙型定数には、符号付きまたは符号なし整数の値にプロモート可能な値と、 整数でなくてもよい別個の型が指定されます。 列挙型定数は、整数定数が許可される場所、 または C++ の場合は、列挙型の値が許可される場所であればどこでも使用できます。

各列挙型定数は、列挙が定義されるスコープ内で固有にする必要があります。 次の例では、averagepoor の 2 番目の宣言が、コンパイラー・エラーの原因になります。

func()
    {
       enum score { poor, average, good };
       enum rating { below, average, above };
       int poor;
    }

次のデータ型宣言は、列挙型定数として oatswheatbarleycorn、および rice をリストします。 各定数の下の番号は、整数値を表します。

enum grain { oats, wheat, barley, corn, rice };
   /*         0      1      2      3     4         */
 
enum grain { oats=1, wheat, barley, corn, rice };
   /*         1        2      3      4     5       */
 
enum grain { oats, wheat=10, barley, corn=20, rice };
   /*          0     10        11     20       21  */

同じ整数を 2 つの異なる列挙型定数に関連付けることができます。 例えば、次の定義は有効です。 ID suspendhold には、同じ整数値が指定されます。

enum status { run, clear=5, suspend, resume, hold=6 };
   /*          0      5        6       7       6       */

関連参照

IBM Copyright 2003