void test()
enum week ;
enum other ;
enum week week = mon;
// 1. 允許非列舉值賦值給列舉型別, 允許其他列舉型別的值賦值給當前列舉型別
week = 100; //ok
week = one; //ok
// 2. 列舉值具有外層作用域,容易造成名字衝突
int one = 100; //error
// 3. 不同型別的列舉值可以直接比較
if (week == one)
printf("equaln");
其中第二種情況錯誤提示如下:
// 1. c++ 只能允許賦值列舉值
// week = 100; //error
// week = one; //error
// 2. 列舉元素會暴露在外部作用域,不同的兩個列舉型別,若含有相同列舉元素,則會衝突
enum otherweek ;
// 3. c++ 只允許同列舉型別值之間比較
// enum e1 ; //error
// enum e2 ; //error
// cout << (e1::b == e2::d ? "相等" : "不相等") << endl; //error
我們看到第二種情況仍然報錯如下:
// 1. 強列舉型別不會將列舉元素暴露在外部作用域
cout << (int)(e1::a) << endl;
int a = 100;
// 2. 不相關的兩個列舉型別不能直接比較,編譯報錯
cout << (e1::b == e2::c ? "相等" : "不相等") << endl; //error
cout << (e1::b == 2 ? "相等" : "不相等") << endl; //error
報錯資訊如下:
由此我們可以看到,強列舉型別禁止不同列舉型別之間進行比較
1. c 列舉型別支援不同型別列舉值之間賦值、以及數字賦值、比較,並且具有外層作用域。
2. c++ 中列舉不允許不同型別的值給列舉型別變數賦值,但仍然支援不同型別之間列舉進行比較,列舉符號常量具有挖外作用域。
3. c++ 強列舉型別不允許不同型別之間的賦值、比較,列舉常量值並不具有外層作用域。
C與C 中的列舉
1.c語言中 enum void test enum other enum week week mon 1.允許非列舉值賦值給列舉型別,允許其他列舉型別的值賦值給當前列舉型別 week 100 okweek one ok 2.列舉值具有外層作用域,容易造成名字衝突 int one 100 error...
C 列舉 詳解
列舉是乙個值型別,包含一組命名的常量,列舉型別用 enum 關鍵字定義 public enum color 可以宣告列舉型別的變數,如變數 c1,用列舉型別的名稱作為字首,設定乙個命名常量,來賦予列舉中的乙個值 color c1 color.red console.writeline c1 控制台輸...
C與Objective C中的列舉 位移列舉
1.在c語言 中我們用到一串有關聯,被當作判斷狀態依據的常量時,會用到列舉enum,其使用 enum week 預設情況mon 0 後面依次加1,也可以自己指定 enum week 這樣mon 1 後面依然依次加1.2.在objective c 中,因為版本,有幾種實用列舉的樣式。使用c語言樣式 e...