全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

首頁(yè)技術(shù)文章正文

C與C++的枚舉的不同[C++培訓(xùn)]

更新時(shí)間:2020-01-16 來(lái)源:黑馬程序員 瀏覽量:

C語(yǔ)言和C++語(yǔ)言都提供了枚舉類(lèi)型,兩者是有一定區(qū)別。我們接下來(lái)通過(guò)代碼進(jìn)行演示:


1. C語(yǔ)言中 enum

 

void test()

{

         enum   Week { Mon, Tue, Wed, Thi, Fri, Sat, Sun };

         enum   Other { One, Two, Three };

         enum   Week week = Mon;

 

         //   1. 允許非枚舉值賦值給枚舉類(lèi)型, 允許其他枚舉類(lèi)型的值賦值給當(dāng)前枚舉類(lèi)型

         week   = 100;  //ok

         week   = One;  //ok

 

         // 2. 枚舉值具有外層作用域,容易造成名字沖突

         int One = 100;  //error

 

         //   3. 不同類(lèi)型的枚舉值可以直接比較

         if   (week == One)

         {

                   printf("equal\n");

         }

}

   

其中第二種情況錯(cuò)誤提示如下:

1579140127125_C++的枚舉01.jpg


2、C++中 enum

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. 枚舉元素會(huì)暴露在外部作用域,不同的兩個(gè)枚舉類(lèi)型,若含有相同枚舉元素,則會(huì)沖突

         enum   OtherWeek { Mon };

 

         //   3. C++ 只允許同枚舉類(lèi)型值之間比較

         //   enum E1 { A, B };  //error

         //   enum E2 { C, D };  //error

         //   cout << (E1::B == E2::D ? "相等" : "不相等") << endl;  //error

}

 

我們看到第二種情況仍然報(bào)錯(cuò)如下:

 

1579140137348_C++的枚舉02.jpg


3. C++中的 enum class

void test()

{

         enum   class E1 { A = 1, B = 2 };

         enum   class E2 { A = 1, C = 2 };

 

         //   1. 強(qiáng)枚舉類(lèi)型不會(huì)將枚舉元素暴露在外部作用域

         cout   << (int)(E1::A) << endl;

         int   A = 100;

 

         //   2. 不相關(guān)的兩個(gè)枚舉類(lèi)型不能直接比較,編譯報(bào)錯(cuò)

         cout   << (E1::B == E2::C ? "相等" : "不相等") << endl; //error

         cout   << (E1::B == 2 ? "相等" : "不相等") << endl; //error

}

   

報(bào)錯(cuò)信息如下:

由此我們可以看到,強(qiáng)枚舉類(lèi)型禁止不同枚舉類(lèi)型之間進(jìn)行比較。 

1579140146857_C++的枚舉03.jpg


4. 總結(jié)

1. C 枚舉類(lèi)型支持不同類(lèi)型枚舉值之間賦值、以及數(shù)字賦值、比較,并且具有外層作用域。

2. C++ 中枚舉不允許不同類(lèi)型的值給枚舉類(lèi)型變量賦值,但仍然支持不同類(lèi)型之間枚舉進(jìn)行比較,枚舉符號(hào)常量具有挖外作用域。

3. C++ 強(qiáng)枚舉類(lèi)型不允許不同類(lèi)型之間的賦值、比較,枚舉常量值并不具有外層作用域。推薦了解黑馬程序員C++培訓(xùn)課程。

猜你喜歡:
C++與C如何區(qū)分?

c語(yǔ)言編程入門(mén)視頻教程下載


分享到:
在線(xiàn)咨詢(xún) 我要報(bào)名
和我們?cè)诰€(xiàn)交談!