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

2021-07-04 15:47:07 字數 587 閱讀 9942

首先第一點,我們要弄清乙個概念,那就是列舉型別的名字都在其父作用域空間 可見的。舉個例子就一目了然了。

enum type ;

enum category;

由於category中的general和type中的general都是全域性的名字,因此編譯器會報錯。

c++11之前的程式設計師為了解決這個問題,通過namespace來分割全域性空間,但是,同理,在新的那個命名空間中,仍然存在著被enum成員汙染的問題。

第二點,還有乙個長期讓程式設計師不舒服的問題,那就是對於列舉型別,我們通常使用的變數個數都不超過255個,也就是說用乙個位元組儲存就足夠了。但是,列舉變數卻是按整形來儲存的。我們多麼希望可以指定儲存型別,對於小於255的enum變數,要是可以指定用char來儲存就好了。

當然,還有其他一些弊端,就不一一說了。之所以說以上兩點,是為了引出今天的主人公——強型別列舉。

宣告強型別列舉很簡單,只需要在原有的enum後加上關鍵字class即可。

enum class type ;

這樣,就宣告了乙個強型別列舉。強型別列舉有以下幾點優勢:

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 你可能會想到使用命名空間來封裝列舉型別,但是如果其中的某個命名空...