c++11引入了一種新的列舉型別,即「列舉類」或「強型別列舉」。宣告強型別列舉非常簡單,只需要在enum後加上class或struct即可。例如:
enum old
;// 老形式
enum
class
new;
// 新形式
enum
struct new2
;// 新形式
傳統的c++列舉型別有一些缺點:
如果在相同作用域中的兩個列舉型別具有相同名字的列舉成員,將會導致命名衝突
他們會被隱式型別轉換為整型
不能指定列舉的底層資料型別
void
test06()
;// enum status2 ;// 錯誤,將會導致命名衝突
}
c++11中,強型別列舉解決了這些問題
void
test05()
;enum
struct status2
;// status flag1 = 10; // 無法隱式轉換為int型別
// status flag2 = ok; // 必須使用強型別名稱
status flag3 = status::ok;
enum
classc:
char
;// 指定列舉的底層資料型別
enum
classd:
unsigned
int;
cout <<
sizeof
(c::c1)
<< endl;
cout <<
(unsigned
int)d::dbig << endl;
// 編譯器輸出一致,4294967280
cout <<
sizeof
(d::d1)
<< endl;
cout <<
sizeof
(d::dbig)
<< endl;
}
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 你可能會想到使用命名空間來封裝列舉型別,但是如果其中的某個命名空...
強型別列舉以及C 11對原有列舉型別的擴充套件
非強型別作用域,允許隱式轉換為整型,占用儲存空間及符號性不確定,都是列舉類的缺點。針對這些缺點,新標準c 11引入了一種新的列舉型別,即 列舉類 又稱 強型別列舉 語法 在enum後加上關鍵字class enum class enumtype 優勢 強作用域,強型別列舉成員的名稱不會被輸出到其父作用...