編程規范之枚舉
1.1 初始化枚舉項
枚舉平時用的也沒有很頻繁,今天看代碼規范提到枚舉類型初始化枚舉項。并對初始化枚舉項進行了歸納。包括下面三個
不進行顯示初始化,交由編譯器完成。
對第一個枚舉項的顯式初始化,這樣可以強制整數值的分配從給定的值開始。采用這種方法,必須確保所使用的初始化值足夠小,是的后續值不會超過枚舉項所使用潛在類型的存儲范圍
對枚舉中所有枚舉項顯示初始化。
另外提到c++直接從c繼承了枚舉類型,其工作方式基本和c類似,只是枚舉在c++中是”真正的類型“,增加了編譯期檢查。c++11提供了類型安全的枚舉類,使用enum struct和enum class來聲明,相對于c風格(unscoped enum),該類型不會被隱式轉換為整數類型。
1.2 優先使用枚舉類而不是枚舉項
當然這個是在c++中才行。c只有普通枚舉。提到普通類型的枚舉項和他的枚舉類型在一個作用域空間。會污染命名空間,因而在這個作用域內不能再使用相同標識符聲明變量。
寫了下面的代碼驗證。同時還注意了枚舉的規范寫法。
//enum WEEKDAY
//{
// MONDAY = 0,
// TUESDAY,
// WEDNESDAY,
// THURSDAY,
// FRIDAY,
// SATURDAY,
// SUNDAY
//}; //寫法不對enum Weekday
{MONDAY = 0,TUESDAY,WEDNESDAY,
};const bool MONDAY = false; // 報錯重復定義enum class WeekdayClass
{THURSDAY = 3,FRIDAY,SATURDAY,SUNDAY
};const bool THURSDAY = false;
除此之外,普通枚舉的枚舉項太容易被隱式轉換為int,而某些轉換可能并不是程序員所期望的。枚舉類的枚舉項是強類型的,不允許隱式轉換為數值。改為使用枚舉類后,例子中的意外情況在編譯時就會被發現。