C 11 強型別列舉

2021-10-01 08:03:53 字數 1063 閱讀 7499

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 優勢 強作用域,強型別列舉成員的名稱不會被輸出到其父作用...