1. 程式人生 > >C++中傳統列舉和強型別列舉的區別?

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函式,就的進行強制轉換。

這是我個人的一點看法,敬請看到網友大力評論!