C語言和C++中的枚舉

C語言和C++語言都提供了枚舉類型,兩者是有一定區別. 我們接下來通過代碼進行演示:


1. C語言中 enum

<code>void test(){enum Week { Mon, Tue, Wed, Thi, Fri, Sat, Sun };enum Other { One, Two, Three };enum Week week = Mon;// 1. 允許非枚舉值賦值給枚舉類型, 允許其他枚舉類型的值賦值給當前枚舉類型week = 100;  //okweek = One;  //ok// 2. 枚舉值具有外層作用域,容易造成名字衝突int One = 100;  //error// 3. 不同類型的枚舉值可以直接比較if (week == One){printf("equal\\n");}}/<code>

其中第二種情況錯誤提示如下:

C語言和C++中的枚舉

2. C++中 enum

<code>void test(){enum Week { Mon, Tue, Wed, Thi, Fri, Sat, Sun };enum Other { One, Two, Three };enum Week week = Mon;// 1. C++ 只能允許賦值枚舉值// week = 100;  //error// week = One;  //error// 2. 枚舉元素會暴露在外部作用域,不同的兩個枚舉類型,若含有相同枚舉元素,則會衝突enum OtherWeek { Mon };// 3. C++ 只允許同枚舉類型值之間比較// enum E1 { A, B };  //error// enum E2 { C, D };  //error// cout << (E1::B == E2::D ? "相等" : "不相等") << endl;  //error}/<code>

我們看到第二種情況仍然報錯如下:

C語言和C++中的枚舉

3. C++中的 enum class

<code>

報錯信息如下:

C語言和C++中的枚舉

由此我們可以看到,強枚舉類型禁止不同枚舉類型之間進行比較.


4. 總結

1. C 枚舉類型支持不同類型枚舉值之間賦值、以及數字賦值、比較,並且具有外層作用域。

2. C++ 中枚舉不允許不同類型的值給枚舉類型變量賦值,但仍然支持不同類型之間枚舉進行比較,枚舉符號常量具有挖外作用域。

3. C++ 強枚舉類型不允許不同類型之間的賦值、比較,枚舉常量值並不具有外層作用域。


分享到:


相關文章: