编程规范之枚举
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,而某些转换可能并不是程序员所期望的。枚举类的枚举项是强类型的,不允许隐式转换为数值。改为使用枚举类后,例子中的意外情况在编译时就会被发现。