列挙に番号を割り当てないenum
がある場合、序数値は0になりますか?例えば:
enum enumeration { ZERO,
ONE,
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE };
C99標準には0の序数が必要であるとの引用 を見つけることができました。しかし、C++はC99標準のいくつかのことを無視することを知っています。そして、私は 1の序数値を使用してコンパイラを目撃した後 を見つけることもできました。
私は本当にC++のこれを確認する答えを見たいのですが、序数0がif ifを保持するかどうかも知りたいですenum
の中央の値:
enum enumeration { ZERO,
ONE,
TWO,
THREE = 13,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE };
その標準ごと[dcl.enum]
Enumのみのenum-keyで宣言された列挙型は、スコープなし列挙であり、その列挙子はスコープなし列挙子です。 enum-keys enumクラスとenum structは意味的に同等です。これらのいずれかで宣言された列挙型はスコープ付き列挙であり、その列挙子はスコープ付き列挙子です。スコープ付き列挙の宣言では、オプションの識別子を省略しないでください。 enum-baseのtype-specifier-seqは、整数型を指定します。 cv-qualificationは無視されます。スコープのない列挙を宣言するopaqueenum-declarationは、enum-baseを省略しません。 enumerator-listの識別子は定数として宣言され、定数が必要な場所に表示できます。 =を持つenumeratordefinitionは、関連付けられた列挙子に、constant-expressionで示される値を与えます。 最初の列挙子に初期化子がない場合、対応する定数の値はゼロです初期化子のない列挙子定義は、前の列挙子の値を1増やした値を列挙子に与えます。
重点鉱山
そのため、開始値を指定しない場合、デフォルトで0になります。
私は本当にC++のこれを確認する答えを見たいのですが、enumの途中で値を指定しても序数0が保持されるかどうかを知りたいです:
これも機能します。 0から始まり、途中で増加します。その後、列挙型に値を割り当てると、次の値に対してその値から増加し始めます。
C++ 11仕様(7.2/2)から:
最初のenumeratorにinitializerがない場合、対応する定数の値はゼロです。 初期化子なしのenumerator-definitionは、enumeratorに、前のenumeratorの値を増やした値を与えます1。
そのため、列挙の最初の識別子の値は0になり(明示的に別の値に初期化されていない場合)、連続する各識別子の値は前の1になります。
§7.2、p 165から
。最初の列挙子に初期化子がない場合、対応する定数の値はゼロです
ソース: http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/n4527.pdf