C++枚举类型

C++有两种类型,一种是枚举类型,一种是强枚举类型,下面看一下普通的枚举类型

1 enum MyEnum
2 {
3     One,
4     Two
5 };

这种枚举类型是暴露在全局下的,枚举变量不受限,可以直接使用,并且枚举类型的值,是一个整数类型,支持比较运算和算法运算,属于弱类型。

看一下强枚举类型:

1 enum class MyEnum
2 {
3     One = 'a',
4     Two
5 };

这种类型属于强枚举类型,其特性分别有:受限的名称空间。枚举值是一个整数常量,不支持算数运算,和比较运算,也不支持默认的转换(如int等)。

强枚举类型的是类型安全的,如果在代码中不小心对强枚举类型执行了++运算,那么编译器将发出错误警告。以避免出现bug。

强枚举类型可以通过显示指定类型,来确定枚举值的类型,下面看一下示例:

1 enum class MyEnum : unsigned int            //改变强枚举类型的值类型
2 {
3     One = 'a',
4     Two
5 };

此时MyEnum的值具有int类型的值,但是在此时枚举值依然不能进行比较运算等,这不能修改强枚举类型的属性。

在编写强枚举类型时,有时会大量使用枚举值,C++新特性除了一个语法,解锁枚举空间

例:using enum MyEnum;

此语句将会解锁受限的强枚举值,直接使用枚举值,而不需要加限定符,此语句的有效范围该语句所在的声明周期内,假设在一个函数内using enum MyEnum;那么强枚举类型的解除受限范围只在本函数内有效,超出本函数以外的代码段将必须使用受限的名称空间。

posted @ 2021-09-16 08:10  大笨瓜  阅读(334)  评论(0)    收藏  举报