月望村吧 关注:4贴子:684

C++ 中的枚举(Enumeration)

只看楼主收藏回复

含义
枚举(Enumeration)是一种用户定义的数据类型,用于表示一组命名的整型常量。这些常量通常具有相关的语义,是一种让代码更加易读和易维护的方式。枚举类型可以帮助程序员在代码中使用具名常量,而不是“魔法数字”(magic numbers),从而提高代码的可读性和可维护性。
在 C++ 中,枚举类型有两种形式:传统枚举(C++98/03)和强类型枚举(C++11 及以后)。


IP属地:江苏1楼2024-06-08 13:35回复
    传统枚举(C++98/03)
    enum Color {
    RED, // 默认为 0
    GREEN, // 默认为 1
    BLUE // 默认为 2
    };


    IP属地:江苏2楼2024-06-08 13:36
    收起回复
      强类型枚举(C++11 及以后)
      enum class Color {
      RED, // 默认为 0
      GREEN, // 默认为 1
      BLUE // 默认为 2
      };


      IP属地:江苏3楼2024-06-08 13:37
      收起回复
        枚举的用途
        状态表示:枚举常常用于表示对象的状态。例如,网络连接的状态、文件操作的状态、任务的状态等。
        enum class ConnectionState {
        DISCONNECTED,
        CONNECTING,
        CONNECTED,
        DISCONNECTING
        };


        IP属地:江苏4楼2024-06-08 13:38
        回复
          选项和配置:可以使用枚举来表示一组配置选项或模式。例如,图形渲染模式、日志记录级别等。
          enum LogLevel {
          INFO,
          WARNING,
          ERROR
          };


          IP属地:江苏5楼2024-06-08 13:38
          回复
            标志和标记:枚举可以用来表示一组位标志,尽管在 C++ 中这通常结合 enum class 和位运算符来使用。
            enum FilePermissions {
            READ = 1,
            WRITE = 2,
            EXECUTE = 4
            };


            IP属地:江苏6楼2024-06-08 13:38
            回复
              接口参数和返回值:枚举可以用于函数的参数和返回值,增加代码的可读性和可维护性。
              enum class ErrorCode {
              SUCCESS,
              NOT_FOUND,
              PERMISSION_DENIED
              };
              ErrorCode performOperation() {
              // Some operation
              return ErrorCode::SUCCESS;
              }


              IP属地:江苏7楼2024-06-08 13:39
              回复
                简化代码:枚举可以用来简化条件判断,使代码更加清晰。
                enum class Day {
                MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
                };
                Day today = Day::FRIDAY;
                if (today == Day::FRIDAY) {
                std::cout << "It's Friday!" << std::endl;
                }


                IP属地:江苏8楼2024-06-08 13:39
                回复
                  使用枚举的最佳实践
                  使用强类型枚举:在 C++11 及之后的版本中,优先使用 enum class 而不是传统的 enum,以避免命名冲突和隐式转换问题。
                  命名约定:为枚举类型和枚举常量使用合适的命名约定,使其含义明确。
                  显式值赋值:在需要明确控制枚举常量值的情况下,可以显式地为它们赋值。
                  =================
                  enum class ErrorCode {
                  SUCCESS = 0,
                  NOT_FOUND = 404,
                  PERMISSION_DENIED = 403
                  };
                  =================
                  避免使用魔法数字:使用枚举代替“魔法数字”,提高代码的可读性和可维护性。
                  考虑位掩码(Bitmask):在需要多个标志组合使用的情况下,可以使用 enum class 和位运算符来表示位掩码。


                  IP属地:江苏9楼2024-06-08 13:41
                  回复
                    枚举常量”(enumeration constant)和“枚举成员”(enumeration member)基本上是同义词。它们都指的是在枚举类型中定义的命名常量。


                    IP属地:江苏10楼2024-06-08 13:46
                    回复
                      枚举常量(Enumeration Constant)或 枚举成员(Enumeration Member)定义与含义
                      枚举类型 是一种用户定义的类型,用于表示一组相关的命名常量。
                      枚举常量/枚举成员 是在枚举类型中定义的每个具体的命名常量,它们代表了一组离散的整数值。


                      IP属地:江苏11楼2024-06-08 13:46
                      回复
                        考虑一个简单的枚举类型示例:
                        enum Color {
                        RED, // 0
                        GREEN, // 1
                        BLUE // 2
                        };


                        IP属地:江苏13楼2024-06-08 13:47
                        收起回复
                          枚举的基本用法 传统枚举(C++98/03)
                          enum Color {
                          RED = 1,
                          GREEN,
                          BLUE
                          };


                          IP属地:江苏14楼2024-06-08 13:48
                          收起回复
                            使用枚举常量时,可以直接使用它们的名称:
                            Color myColor = RED; // 将 myColor 变量赋值为枚举常量 RED
                            if (myColor == GREEN) {
                            // 执行一些操作
                            }


                            IP属地:江苏15楼2024-06-08 13:48
                            回复
                              强类型枚举(C++11 及以后)
                              enum class Color {
                              RED,
                              GREEN,
                              BLUE
                              };


                              IP属地:江苏16楼2024-06-08 13:49
                              回复