枚举enum

以你之姓@ 2022-12-11 09:10 473阅读 0赞

枚举类型enum

C++中,枚举类型(enumeration) 是一个被命名的整型常量的集合。和类一样,每个枚举类型定义了一种新的类型。枚举属于字面值常量类型。C++包含两种枚举:限定作用域的和不限定作用域的。

限定作用域的枚举类型

限定作用域的枚举类型(scoped enumeration)定义形式如下:

  1. enum class open_modes {
  2. input, output, append};

首先是关键字enum class(或者是等价的使用enum struct),随后是枚举类型名字以及用花括号括起来的以逗号分隔的枚举成员(enumerator),最后加上分号。上面的函数定义了一个名为open_modes的枚举类型,它包含三个枚举成员:input、output、append。

不限定作用域的枚举类型

不限定作用域的枚举类型(unscoped enumeration)定义时省略掉关键字class(或struct),枚举类型的名字是可选的,如果enum是未命名的,则我们只能在定义该enum时定义它的对象。

  1. enum color {
  2. red, yellow, green}; //不限定作用域的枚举类型
  3. enmu {
  4. floatPrec = 6, doublePrec = 10, double_doublePrec = 10}; //未命名的、不限定作用域的枚举类型

枚举成员

作用域

在限定作用域的枚举类型中,枚举成员遵循常规的作用域准则,并且在枚举类型的作用域外是不可访问的。与之相反,在不限定作用域的枚举类型中,枚举成员的作用域与枚举本身的作用域相同:

  1. enum color {
  2. red, yellow, green}; //正确,不限定作用域的枚举类型
  3. enum stoplight {
  4. red, yellow, green}; //错误,重复定义了枚举成员
  5. enum class peppers {
  6. red, yellow, green}; //正确,枚举成员被隐藏了
  7. color eyes = green; //正确,不限定作用域的枚举类型的枚举成员位于有效的作用域中
  8. peppers p = green; //错误,peppers的枚举成员不在有效的作用域中,color::green在有效的作用域中,但是类型错误
  9. color hair = color::red; //正确,允许显示的访问枚举成员
  10. peppers p2 = peppers::red; //正确,使用peppers的red

枚举值

默认情况下,枚举值从0开始,依次加1。不过我们也能为一个或几个枚举成员指定专门的值,并且枚举值不一定唯一。

  1. enum class intTypes {
  2. charTyp = 8, shortTyp = 16, intTyp = 16, longTyp = 32, long_longTyp = 64
  3. };

枚举成员是const,因此在初始化枚举成员时提供的初始值必须是常量表达式。

发表评论

表情:
评论列表 (有 0 条评论,473人围观)

还没有评论,来说两句吧...

相关阅读

    相关 (enum)

    前言 实际上,枚举类型是特殊的类,和C语言C++中的枚举不太一样,下面我们做详细说明。关于枚举类型有一个单独的设计模式:即单例设计模式。单例类是一个类只有一个实例,那么多

    相关 enum

    枚举类型enum C++中,枚举类型(enumeration) 是一个被命名的整型常量的集合。和类一样,每个枚举类型定义了一种新的类型。枚举属于字面值常量类型。C++包含

    相关 类(enum

    【1】什么是枚举类?     实例(也叫对象)有限且固定不变的类,在Java里被称为枚举类。     例如,季节类,它只有4个实例(春、夏、秋、冬),并且这4个实例不