Enum詳細

2271 ワード

定義:シンボル定数を作成する方法です.
その定義から,enumは定数を定義するために用いられることがわかる.constから異なるのは、複数の定数値を含む定数セットです.
For example: 
  enum color
	{
		red,
		green,
		yellow,
		blue
	};

すなわち,colorという定数に対してred,green,yellow,blueの4つの値をとることができる.これらは整数0,1,2,3に対応する.これらの定数を列挙量と呼ぶ.デフォルトでは、整数を列挙量に割り当て、最初の列挙量の値は0、2番目の列挙量の値は1であり、その後はこのようにします.
もちろん、対応する整数値をカスタマイズすることもできます.次のようにします.
   enum color
	{
		red,
		green = 10,
		yellow = 20,
		blue
	};
このように定義すると、redに対応する整数値は依然として0であり、greenとyellowはすでに値を付与しているため、元のデフォルト値は上書きされ、blueに対してはyellowに対応する値である.
整数に1を加えると、21になります.
欠陥:列挙で定義された定数は、列挙自体に属するのではなく、列挙を定義する役割ドメインと同じです.
For example: 
  color col = red;	//  
	col = ::green;		//  
	col = color::blue;	//  
も、列挙中の定数値が同じファイルで繰り返し定義できないという欠陥のためである.
For example: 
 enum test1
	{
		first,
		second = 10
	};

	enum test2
	{
		first,
		second,
		third
	};

コンパイラはerror:conflicting declaration'second'とプロンプトします.
注:列挙量は整数であるためintタイプに昇格することもできますが、intタイプは自動的に列挙タイプに変換できません.
For example:
        int num = green;
	int m = red + 10;

この2つの方法はすべて合法的です!
占有するストレージスペース:この定義を見ると、少しかゆくて、sizeof()の値をテストしたいと思っています.いいですね.結果はちょっと意外でした.出力結果は4(GCCコンパイラ)です.なぜですか.これは具体的なコンパイラに関連しています.値範囲の小さい列挙では、1バイト以下のスペースを使用すれば十分です.ただし、longタイプを含む列挙では、4バイトを使用します.
適用:
#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

enum color
{
        red,
        green,
        yellow,
        blue
};

int main(void)
{
    int id;
    cout << "Please input the number of color:";
    cin >> id;

    switch (id)
    {
        case red:
            cout << "You choose red!"<< endl;
            break;
        case green:
            cout << "You choose green!"<< endl;
            break;
        case yellow:
            cout << "You choose yellow!"<< endl;
            break;
        case  blue:
            cout << "You choose blue!"<< endl;
            break;
        default:
            ;
    }

    return 0;
}