时间:2014.03.06
地点:基地一楼
—————————————————————————
一、简述
强类型枚举(Strongly-typed enums),号称枚举类型,是C++11中的新语法,用以解决传统C++枚举类型存在的缺陷。传统C++中枚举常量被暴漏在外层作用域中,这样若是同一作用域下有两个不同的枚举类型,但含有相同的枚举常量也是不可的,比如:
enum Side{Right,Left}; enum Thing{Wrong,Right};这是不能一起用的。
另外一个缺陷是传统枚举值总是被隐式转换为整形,用户无法自定义类型。C++11中的强类型枚举解决了这些问题。
—————————————————————————
二、强类型枚举
强类型枚举使用enum class语法来声明,如下:
enum class Enumeration{ VAL1, VAL2, VAL3=100, VAL4 };这样,枚举类型时安全的,枚举值也不会被隐式转换为整数,无法和整数数值比较,比如(Enumeration::VAL4==10会触发编译错误)。
另外枚举类型所使用的类型默认为int类型,也可指定其他类型,比如:
enum calss Enum:unsigned int{VAL1,VAL2};正如前面所说,强类型枚举能解决传统枚举不同枚举类下同枚举值名的问题,使用枚举类型的枚举名时,必须指明所属范围,比如:Enum::VAL1,而单独的VAL1则不再具有意义。
还有一点值得说明的是C++11中枚举类型的前置声明也是可行的,比如:
enum calss Enum; enum class Enum1:unsigned int;—————————————————————————
三、项目中的强类型枚举代码片段
1、图像处理
enum class Color{RED,BLUE,YELLOR,BLACK,WHITE};
2.交通灯
enum class TrafficLight{RED,YELLOR,GREEN};
强类型枚举值具有传统枚举的功能——命名枚举值,同时又具有类的特点——具有类域的成员和无法进行默认的类型转换。所以也称之为枚举类——enmu class
枚举类的底层数据必须是有符号或无符号整型,比如char unsigned int unsigned long,默认为int。
3.前置声明应用
enmu class Clolor:char; //前置声明枚举类 void Foo(Color*p); //前置声明的使用 //.................... enum class Color:char{RED,GREEN,BLACK,WHITE}; //前置声明的定义