enum class 和 enum比较

2021-03-18 18:27

阅读:663

标签:style   编译   直接   命名   text   类型比较   比较   black   als   

两种类型比较

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

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

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

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

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

补充:

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

定义

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

enum class 和 enum比较

标签:style   编译   直接   命名   text   类型比较   比较   black   als   

原文地址:https://www.cnblogs.com/06le/p/13767211.html


评论


亲,登录后才可以留言!