D 1.0   D 2.0
About Japanese Translation

Last update Tue Nov 9 13:50:04 2010

列挙体 - 並べあげる型

EnumDeclaration:
	enum EnumTag EnumBody
	enum EnumBody
	enum EnumTag : EnumBaseType EnumBody
	enum : EnumBaseType EnumBody

EnumTag:
	Identifier

EnumBaseType:
	Type

EnumBody:
	;
	{ EnumMembers }

EnumMembers:
	EnumMember
	EnumMember ,
	EnumMember , EnumMembers

EnumMember:
	Identifier
	Identifier = AssignExpression

enum宣言は、関連する整数定数の集まりを定義するのに使用されます。 これには二つの形式があります:

  1. EnumTag のある、名前付き列挙体
  2. EnumTag のない、無名列挙体

名前付き列挙体

名前付き列挙体は、 関連する整数定数の集まりを定義し、新しい型を与えるのに使用されます。 各メンバ EnumMembers は、型名 EnumTag のスコープで定義されます。 EnumTag は新しい型となり、 メンバはその型を持つようになります。

以下の例では新しい型 X が定義され、各メンバの値は X.A=0, X.B=1, X.C=2 となります:

enum X { A, B, C }	// 名前付き列挙体

基底型 EnumBaseType が明示されていない場合、 int 型となります。

名前付き列挙体のメンバは EnumBaseType 型に暗黙変換されますが、EnumBaseType の値が名前付き列挙体の型に暗黙変換されることはありません。

各メンバの値は初期化子で指定します。 初期化子がない場合、 直前のメンバの値 + 1 となります。最初のメンバに初期化子がなかった場合は、 値は 0 となります。

列挙体には少なくとも一つのメンバが必要です。

列挙体のデフォルト初期化値

列挙体の .init プロパティは、 先頭のメンバの値となります。 これは、この型の変数のデフォルト初期化値でもあります。

enum X { A=3, B, C }
X x;		// x は 3 に初期化される

列挙体のプロパティ

これらのプロパティは名前付き列挙体にのみ存在します。

.init 先頭のメンバの値
.min 最小のメンバの値
.max 最大のメンバの値
.sizeof 列挙体の値を格納するメモリ領域のサイズ

例:

enum X { A=3, B, C }
X.min     // == X.A
X.max     // == X.C
X.sizeof  // int.sizeof と同じ

無名列挙体

もし Identifier がなければ、その列挙体は 無名列挙体で、その EnumMembersEnumDeclaration の存在するスコープで宣言されます。 新しい型は作られません。EnumMembersEnumBaseType の型を持ちます。

EnumBaseType は、列挙体の元となる型です。

整数型でなければなりません。 省略された場合、デフォルトは int です。

enum { A, B, C }	// 無名列挙体

は、int型の定数 A=0, B=1, C=2 を定義します

列挙体には少なくとも一つのメンバが必要です。

各メンバの値は初期化子で指定します。 初期化子がない場合、 直前のメンバの値 + 1 となります。最初のメンバに初期化子がなかった場合は、 値は 0 となります。

enum { A, B = 5+7, C, D = 8+C, E }

これは全てint型の A=0, B=12, C=13, D=21, E=22 となります。

enum : long { A = 3, B }

は、全てlong型の A=3, B=4 となります。