更新時間:2020-01-16 來源:黑馬程序員 瀏覽量:
C語言和C++語言都提供了枚舉類型,兩者是有一定區(qū)別。我們接下來通過代碼進(jìn)行演示:
1. C語言中 enum
void test()
{
enum Week { Mon, Tue, Wed, Thi, Fri, Sat, Sun };
enum Other { One, Two, Three };
enum Week week = Mon;
// 1. 允許非枚舉值賦值給枚舉類型, 允許其他枚舉類型的值賦值給當(dāng)前枚舉類型
week = 100; //ok
week = One; //ok
// 2. 枚舉值具有外層作用域,容易造成名字沖突
int One = 100; //error
// 3. 不同類型的枚舉值可以直接比較
if (week == One)
{
printf("equal\n");
}
}
其中第二種情況錯誤提示如下:
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. 枚舉元素會暴露在外部作用域,不同的兩個枚舉類型,若含有相同枚舉元素,則會沖突
enum OtherWeek { Mon };
// 3. C++ 只允許同枚舉類型值之間比較
// enum E1 { A, B }; //error
// enum E2 { C, D }; //error
// cout << (E1::B == E2::D ? "相等" : "不相等") << endl; //error
}
我們看到第二種情況仍然報錯如下:
3. C++中的 enum class
void test()
{
enum class E1 { A = 1, B = 2 };
enum class E2 { A = 1, C = 2 };
// 1. 強(qiáng)枚舉類型不會將枚舉元素暴露在外部作用域
cout << (int)(E1::A) << endl;
int A = 100;
// 2. 不相關(guān)的兩個枚舉類型不能直接比較,編譯報錯
cout << (E1::B == E2::C ? "相等" : "不相等") << endl; //error
cout << (E1::B == 2 ? "相等" : "不相等") << endl; //error
}
報錯信息如下:
由此我們可以看到,強(qiáng)枚舉類型禁止不同枚舉類型之間進(jìn)行比較。
4. 總結(jié)
1. C 枚舉類型支持不同類型枚舉值之間賦值、以及數(shù)字賦值、比較,并且具有外層作用域。
2. C++ 中枚舉不允許不同類型的值給枚舉類型變量賦值,但仍然支持不同類型之間枚舉進(jìn)行比較,枚舉符號常量具有挖外作用域。
3. C++ 強(qiáng)枚舉類型不允許不同類型之間的賦值、比較,枚舉常量值并不具有外層作用域。推薦了解黑馬程序員C++培訓(xùn)課程。
猜你喜歡:
C++與C如何區(qū)分?
【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運(yùn)營】深圳跨境電商運(yùn)營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達(dá)13500元
2025-09-19【AI運(yùn)維】鄭州運(yùn)維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19【AI大模型開發(fā)-Python】畢業(yè)33個工作日,就業(yè)率已達(dá)到94.55%,班均薪資20763元
2025-09-19【AI智能應(yīng)用開發(fā)-Java】畢業(yè)5個工作日就業(yè)率98.18%,最高薪資 17.5k*13薪,全班平均薪資9244元
2025-09-19