詳解C與C 中的列舉

2021-10-13 09:10:28 字數 1533 閱讀 3399

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...