C 中傳統列舉和強型別列舉的區別

2021-10-19 05:19:29 字數 675 閱讀 5325

傳統列舉型別定義舉例:

enum animal //列舉型別名字

傳統列舉的使用:特點有3個

1、定義的不同列舉型別,列舉中的元素值不能重複出現;【作用域是全域性】

2、列舉變數的值預設轉換成int型別,所以輸出了cout《總結一下:傳統列舉和強列舉型別的區別:

1、強列舉型別: 不會在同乙個工程下,因為兩個列舉型別有相同的元素值而發生衝突。enum class person:int //不填也行,因為列舉值預設都必須是int型別

;enum class kperson:int

;2、強列舉型別不會把列舉元素的值自動轉換為int型別,即便它是int型別。

person per = person::man;

cout << (int)per << endl;

//cout << per << endl; 這樣不行

3、傳統列舉型別:在同一工程下,不用的列舉型別包含相同的元素是會發生衝突的。

如下這樣會發生重複定義的錯誤

enum animal :int ;

enum kanimal :int;

4、傳統列舉型別,列舉元素自動轉換為int

cout<強列舉:

cout<<(int)person::man<

C 強列舉型別

為了解決c c 中的enum型別的一系列缺點,比如 非強型別,允許隱式轉換為int型,占用儲存空間及符號性不確定。c 11引入了列舉類 又稱為 強列舉型別strong typed enum 語法格式 enum class 型別名 如 enum class people 這樣就成功的定義了乙個強型別的...

有缺陷的列舉型別 和 C 11中的強型別列舉

首先第一點,我們要弄清乙個概念,那就是列舉型別的名字都在其父作用域空間 可見的。舉個例子就一目了然了。enum type enum category 由於category中的general和type中的general都是全域性的名字,因此編譯器會報錯。c 11之前的程式設計師為了解決這個問題,通過n...

C 11 強型別列舉

c 11引入了一種新的列舉型別,即 列舉類 或 強型別列舉 宣告強型別列舉非常簡單,只需要在enum後加上class或struct即可。例如 enum old 老形式 enum class new 新形式 enum struct new2 新形式傳統的c 列舉型別有一些缺點 如果在相同作用域中的兩個...