enum class 和 enum比较
Posted 06le
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了enum class 和 enum比较相关的知识,希望对你有一定的参考价值。
两种类型比较
/ | 不限定作用域 | 限定作用域 |
---|---|---|
作用域范围 | 枚举成员和枚举类型作用域相同 | 枚举成员的名字遵循常规作用域准则 |
自动转换 | 枚举类型或成员可以自动转换成整形 | 不进行隐式转换 |
默认类型 | 不存在 | int |
前置声明 | 需要指定成员类型才可以声明 | 可以用默认类型直接声明 |
- 一般来说大括号里的内容属于一个作用域,但在不限定作用域的枚举类型中,枚举成员的作用域是在枚举类型所属作用域内,这样就可能泄露名字
enum Color {black, white};
auto white = false; //错误,white已经在范围内被声明了。
- 前置声明的好处:
降低编译依赖性,如果枚举类型中的成员要增删,可能整个系统都要重新编译,即使程序只有一个地方使用了该枚举类型。
使用限定作用域范围的枚举类型好处:
- 降低名字冲突。
- 更便捷的前置声明。
- 枚举量是更强类型的,不能隐式转换类型,代码更安全。
使用不限定作用域范围的枚举类型好处:
- 因为枚举成员可以自动转换成整数类型,在需要传入整数的程序中可以直接写枚举成员,可读性高。
补充:
- 不限定作用域的枚举类型也可以前置声明,但需要定义默认类型。
- 在需要传入整数的函数中想用限定作用域范围的枚举类型成员,可以显示的将枚举成员转换类型或者写一个模板函数,传入枚举成员,返回整数值。
定义
enum有名字就可以定义并初始化该类型的成员,只能用enum成员或者同类型enum对象来初始化。如果未命名,则只能在定义enum的时候定义对象。
以上是关于enum class 和 enum比较的主要内容,如果未能解决你的问题,请参考以下文章