C++中傳統列舉和強型別列舉的區別?
傳統列舉型別定義舉例:
enum Animal //列舉型別名字
{
monkey, //列舉中的元素值
horse,
lion,
elephant,
pig
}
傳統列舉的使用:特點有3個
1、定義的不同列舉型別,列舉中的元素值不能重複出現;【作用域是全域性】
2、列舉變數的值預設轉換成int型別,所以輸出了cout<<aAnimal<<endl;
3、列舉值可以給int型別的變數賦值【也是自動型別轉換,列舉型別值先自動轉換為int型別】。
4、其實傳統列舉型別的定義:enum Animal:int{ };也對,在vs2013試的;【不算特點】
強列舉型別的使用。
總結一下:傳統列舉和強列舉型別的區別:
1、強列舉型別: 不會在同一個工程下,因為兩個列舉型別有相同的元素值而發生衝突。enum class Person:int //不填也行,因為列舉值預設都必須是int型別
{
man=20,woman=10,noPerson=30
};
enum class KPerson:int
{
man = 20,woman = 10,noPerson = 30
};
2、強列舉型別不會把列舉元素的值自動轉換為int型別,即便它是int型別。
Person per = Person::man;
cout << (int)per << endl;
//cout << per << endl; 這樣不行
3、傳統列舉型別:在同一工程下,不用的列舉型別包含相同的元素是會發生衝突的。
如下這樣會發生重複定義的錯誤
enum Animal :int {monkey = 3,horse = 1,lion = 8,elephant = 18,pig = 1};
enum KAnimal :int{monkey = 3,horse = 1,lion = 8, elephant = 18,pig = 18};
4、傳統列舉型別,列舉元素自動轉換為int
cout<<monkey<<endl; //自動轉換為int。
強列舉:
cout<<(int)Person::man<<endl; //不會自動轉換為int ,所以想使用cout函式,就的進行強制轉換。
這是我個人的一點看法,敬請看到網友大力評論!