[英]What is the use of enums in C and C++
枚舉是常量整數值的列表。 它可以用來代替使用#define定義常量值。 但除此之外,我還沒有發現C和CPP中枚舉的任何實質性用途。 任何人都可以讓我知道枚舉的確切用途。
最初我想如果我們創建一個枚舉變量並分配一個不在枚舉值中的值,編譯器就會喊出來。 但事實並非如此。 我們可以為枚舉變量賦值。 我想不出枚舉的任何實質性用途。
枚舉在編程中非常有用,因為它們使代碼更具可讀性和更一致性。
例如:說我們有以下switch語句:
switch(fruit)
{
case 1:
// code goes here
break;
case 2:
// code goes here
break;
case 3:
// code goes here
break;
default:
// code goes here
break;
}
如果你定義了一個包含你所擁有的水果的枚舉水果,然后按照以下方式使用它,那就更清楚了:
switch(fruit)
{
case fruits::apple:
// code goes here
break;
case fruits::orange:
// code goes here
break;
case fruits::banana:
// code goes here
break;
default:
// code goes here
break;
}
fruits
是一個枚舉。
enum fruits { apple, orange, banana };
現在將第一個片段與第二個片段進行比較。 第二個是更具可讀性,除此之外你不必記住1是蘋果,2是香蕉等等。
優於宏的優點
#define
,必須提交int
或某些typedef並確保所有常量都適合手動 枚舉非常有助於使您的代碼易於閱讀和理解。
更多的瑣事突出我的觀點:
我讀過CleanCode vom Robert C. Martins這本書,並嘗試遵循他的一些建議,例如,代碼應該解釋自己。 枚舉在C / C ++(對於大多數常見的編譯器)中沒那么有用,因為它們表示為INT,您可以使用Enum中定義的其他值。 因此,#define或const變量具有可比性。 但是,其他語言允許您將有效值限制為Enum中定義的值。
所以,閱讀和寫作,讓我們說工作日對於枚舉來說更方便。 如果星期一是0或1或任何其他值,則無需記住。 如果其他人需要了解您的代碼,這一點就更為重要。
dayOfweek = Monday
比dayOfWeek = 0
更容易理解
枚舉與#define
沒什么不同,除了別人已經說過的,對我來說主要區別在於:
您可以將常量組合在一起
此外,枚舉有一個基礎類型,可以根據您的需要進行指定。 在C ++ 11中,您可以使用enum class
來獲得強大的類型和范圍的枚舉,這使得枚舉更加有用。
一般來說,盡量避免使用預處理器,因為它對代碼及其嘗試的內容一無所知。 不要使用單個常量的定義,而是考慮編寫:
const int MY_CONSTANT = 42;
(以及定義類型常量的所有靜態,成員或命名空間變體)
在編寫您(或可能是其他開發人員)將要重用的類時,您可以使用枚舉,該枚舉可以表示易於閱讀的所述類的選項。 例如
class BankAccount {
// Constructor
BankAccount(int accountType) {
switch(accountType) {
case AccountType::SHARED:
// ...
enum AccountType {
SHARED, SINGLE, // Etc...
所以它看起來像這樣:
new BankAccount(AccountType::SHARED);
而不是這個:
new BankAccount(0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.