強型別列舉以及C 11對原有列舉型別的擴充套件

2021-09-25 04:45:00 字數 829 閱讀 2341

非強型別作用域,允許隱式轉換為整型,占用儲存空間及符號性不確定,都是列舉類的缺點。針對這些缺點,新標準c++11引入了一種新的列舉型別,即「列舉類」,又稱「強型別列舉」。

語法:在enum後加上關鍵字class

enum class enumtype 

;

優勢:

強作用域,強型別列舉成員的名稱不會被輸出到其父作用域空間。

轉換限制,強型別列舉成員的值不可以與整型隱式地相互轉換。

可以指定底層型別,強型別列舉預設的底層型別是int,但也可以顯式地指定底層型別,具體方法為在列舉名稱後面加上「:type」,其中type可以是除wchar_t以外的任何整型。比如:

enum class enumperson : char

;

相比於原來的列舉,強型別列舉更像乙個屬於c++的列舉。但為了配合新的列舉型別,c++11還對原有列舉型別進行了擴充套件。

1. 首先是底層的基礎型別方面。在新標準c++11中,原有列舉型別的底層型別在預設情況下,仍然由編譯器來具體制定實現。但也可以跟強型別列舉類一樣,顯式地由程式設計師來指定。語法同強列舉型別。

enum enumperson : char

;

2. 在c++11中,列舉成員的名字除了會自動輸出到父作用域,也可以在列舉型別定義的作用域內有效。

enum type ;

type t1 = general;

type t2 = type::general;

C 11 強型別列舉

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

C 11 強型別列舉(enum)

c 11之前的enum型別是繼承c的,不溫不火 c 11對enum動刀了,加強了型別檢查,推出強型別enum型別,眼前一亮 使用過qt 的都知道,早就應該這麼做了,用的很爽!一 c中enum型別的侷限 1 非強型別作用域 enum type1 enum type2 問題來了,兩種列舉型別都有a列舉常...

C 11 強型別列舉相關總結

列舉就是定義乙個類別,並且窮舉統一類別下的個體以供 使用。enum public color enum private color red 重定義 enum public color public color 重定義 int main 你可能會想到使用命名空間來封裝列舉型別,但是如果其中的某個命名空...