- ベストアンサー
enumについて
enumでタグを指定しないで、宣言することは可能でしょうか?? もし可能だあれば、どのように宣言し、参照する際はどのようになるのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
列挙型宣言の書式は enum タグ名 { 列挙定数宣言 } 列挙型変数名 ; enum タグ名 { 列挙定数宣言 } ; enum タグ名 列挙型変数名 ; enum { 列挙定数宣言 } 列挙型変数名 ; enum { 列挙定数宣言 } ; よって、 enum RGB { red, green, blue } rgb ; enum CMY { cyan, magenta, yellow } ; enum CMY cmy ; enum { black, white } monochrome ; enum { gold, silver } ; 全て有効な宣言です。 参照時は rgb = red ; cmy = cyan ; monochrome = black ; Cの場合、列挙型は整数型と相互に代入可能なので int col = gold ; C++では列挙型はクラス型なので多少話がややこしくなり、適切なキャスト無しに他の型との相互代入はできません。
その他の回答 (2)
- fatal_error
- ベストアンサー率39% (23/58)
#1の方がばっちり例示されていますが。 できます。 宣言時に列挙型名を省略して変数名だけを書くと、無名の列挙型ができます。 その宣言でしか変数名を作らないときに使います。 enum { BLACK, RED, GREEN, BLUE, WHITE } colors; 宣言はこんな感じで、 colors = BLUE; みたいに使います。 一種の略記法らしいです。
- a-kuma
- ベストアンサー率50% (1122/2211)
例えば、C++ だと、こんな感じ。 #include <iostream.h> class A { public: enum { E1, E2 } x; }; int main() { A a; a.x = A::E2; cout << a.x << endl; return 0; } C なら、こんな感じ。 #include <stdio.h> int main() { enum { E1, E2 } x; x = E2; printf("%d\n", x); return 0; }
お礼
ありがとうございます!! >enum { gold, silver } ↑ このケースがなぞだったのです。 質問の仕方がへたでスイマセンでした。