enum class 和 enum比较

Posted 06le

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了enum class 和 enum比较相关的知识,希望对你有一定的参考价值。

两种类型比较

/ 不限定作用域 限定作用域
作用域范围 枚举成员和枚举类型作用域相同 枚举成员的名字遵循常规作用域准则
自动转换 枚举类型或成员可以自动转换成整形 不进行隐式转换
默认类型 不存在 int
前置声明 需要指定成员类型才可以声明 可以用默认类型直接声明
  • 一般来说大括号里的内容属于一个作用域,但在不限定作用域的枚举类型中,枚举成员的作用域是在枚举类型所属作用域内,这样就可能泄露名字
    enum Color {black, white};
    auto white = false; //错误,white已经在范围内被声明了。
  • 前置声明的好处:
    降低编译依赖性,如果枚举类型中的成员要增删,可能整个系统都要重新编译,即使程序只有一个地方使用了该枚举类型。

使用限定作用域范围的枚举类型好处:

  1. 降低名字冲突。
  2. 更便捷的前置声明。
  3. 枚举量是更强类型的,不能隐式转换类型,代码更安全。

使用不限定作用域范围的枚举类型好处:

  1. 因为枚举成员可以自动转换成整数类型,在需要传入整数的程序中可以直接写枚举成员,可读性高。

补充:

  1. 不限定作用域的枚举类型也可以前置声明,但需要定义默认类型。
  2. 在需要传入整数的函数中想用限定作用域范围的枚举类型成员,可以显示的将枚举成员转换类型或者写一个模板函数,传入枚举成员,返回整数值。

定义

enum有名字就可以定义并初始化该类型的成员,只能用enum成员或者同类型enum对象来初始化。如果未命名,则只能在定义enum的时候定义对象。


以上是关于enum class 和 enum比较的主要内容,如果未能解决你的问题,请参考以下文章

5.9 enum--支持枚举类型

编译java代码出现 错误: 需要class, interface或enum 提示

enum 与 enum class

Kotlin enum class 匿名类实例

enum在java中是啥意思

Android proguard 预期 [!]interface|@interface|class|enum