C++的enum是什么?如何定義和使用?

枚舉是c++++中一種用戶自定義的數(shù)據(jù)類型,用于將一組整型常量以可讀性更強的方式命名,最常見的用途是表示固定選項的狀態(tài)或類別,默認(rèn)值從0開始遞增,也可手動指定數(shù)值,如enum status { success = 0, warning = 5, Error }; 定義枚舉的基本語法為enum 枚舉名 { 值列表 }; 推薦使用enum class來創(chuàng)建作用域枚舉,避免命名沖突,如enum class day { monday, tuesday… }; 使用枚舉的三大好處包括:1. 替代魔法數(shù)字提高代碼可讀性,例如用day::saturday判斷周末;2. 作為狀態(tài)標(biāo)識符,如requeststatus表示網(wǎng)絡(luò)請求狀態(tài)并配合switch處理不同情況;3. 避免全局變量污染,通過enum class使不同枚舉中的相同名稱共存;使用時需注意:不要混用不同枚舉值,盡量使用enum class提升類型安全,顯式設(shè)置初始值有助于維護,且c++不支持直接輸出枚舉名稱為字符串,需自行實現(xiàn)映射。

C++的enum是什么?如何定義和使用?

在C++中,enum(枚舉)是一種用戶自定義的數(shù)據(jù)類型,它可以讓一組整型常量以更具可讀性的方式命名。簡單來說,它的作用是把數(shù)字和名字綁定起來,方便理解和使用。


什么是枚舉?

枚舉最常見的用途是表示一些有固定選項的狀態(tài)或類別。比如顏色、星期幾、錯誤碼等。

默認(rèn)情況下,枚舉值從0開始遞增:

立即學(xué)習(xí)C++免費學(xué)習(xí)筆記(深入)”;

enum Color {     red,   // 0     GREEN, // 1     BLUE   // 2 };

你也可以手動指定某個值,后面的會繼續(xù)遞增:

enum Status {     SUCCESS = 0,     WARNING = 5,     ERROR    // 這里就是6 };

如何定義一個枚舉?

定義一個枚舉的基本語法如下:

enum 枚舉名 {     值1,     值2,     ... };

還可以加上 class 或 Struct 的關(guān)鍵字來創(chuàng)建“作用域枚舉”,避免名字沖突:

enum class Day {     Monday,     Tuesday,     Wednesday };

這樣在使用的時候就需要帶上作用域:

Day today = Day::Monday;

枚舉怎么用?

1. 替代魔法數(shù)字,提高代碼可讀性

比如寫一個函數(shù)判斷今天是否是周末:

enum class Day {     Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };  bool isWeekend(Day day) {     return day == Day::Saturday || day == Day::Sunday; }

比起用數(shù)字 5 和 6 來判斷,這種寫法更容易理解也更安全。

2. 作為狀態(tài)標(biāo)識符

在網(wǎng)絡(luò)請求中,可以用枚舉表示不同的狀態(tài):

enum class RequestStatus {     Pending,     Success,     Failed };

然后根據(jù)不同狀態(tài)做處理:

void handleRequest(RequestStatus status) {     switch(status) {         case RequestStatus::Pending:             std::cout << "等待響應(yīng)..." << std::endl;             break;         case RequestStatus::Success:             std::cout << "成功獲取數(shù)據(jù)" << std::endl;             break;         case RequestStatus::Failed:             std::cout << "請求失敗" << std::endl;             break;     } }

3. 避免全局變量污染(使用 enum class)

普通枚舉的值會被“提升”到外層作用域,容易造成重名問題:

enum Color { RED, GREEN }; enum Fruit { RED, APPLE }; // 編譯錯誤:RED重復(fù)了

改用 enum class 就可以解決這個問題:

enum class Color { RED, GREEN }; enum class Fruit { RED, APPLE };  Color c = Color::RED; Fruit f = Fruit::RED;

定義和使用時需要注意什么?

  • 不要混用不同枚舉類型的值:即使它們底層都是int,也不建議直接比較或賦值。
  • 盡量使用 enum class:避免命名沖突,提高類型安全性。
  • 顯式設(shè)置初始值可以增強可維護性:尤其是用于協(xié)議或配置時,明確數(shù)值有助于排查問題。
  • 不能直接輸出枚舉名稱:C++沒有內(nèi)置方法將枚舉值轉(zhuǎn)為字符串,需要自己實現(xiàn)映射。

基本上就這些。enum 在 C++ 中雖然基礎(chǔ),但用好了能大大提升代碼的清晰度和安全性。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊6 分享