时间:2014.03.06
地点:基地一楼
—————————————————————————
强类型枚举(Strongly-typed enums),号称枚举类型,是C++11中的新语法,用以解决传统C++枚举类型存在的缺陷。传统C++中枚举常量被暴漏在外层作用域中,这样若是同一作用域下有两个不同的枚举类型,但含有相同的枚举常量也是不可的,比如:
enum Side{Right,Left}; enum Thing{Wrong,Right};这是不能一起用的。
—————————————————————————
强类型枚举使用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;—————————————————————————
enum class Color{RED,BLUE,YELLOR,BLACK,WHITE};
enum class TrafficLight{RED,YELLOR,GREEN};
枚举类的底层数据必须是有符号或无符号整型,比如char unsigned int unsigned long,默认为int。
enmu class Clolor:char; //前置声明枚举类 void Foo(Color*p); //前置声明的使用 //.................... enum class Color:char{RED,GREEN,BLACK,WHITE}; //前置声明的定义