c++ - 不同的枚举,相同的值

标签 c++ enumeration

是否可以使两个不同的枚举具有相同的值? 例如,

enum direction{
    LEFT,
    RIGHT,
    UP,
    DOWN,
    NONE
}
enum color{
   RED,
   GREEN,
   BLUE,
   NONE
}

编译器会说有两个“NONE”声明。 有解决办法吗?

最佳答案

有几种解决方法。一种方法是使用命名空间来包装枚举并防止值污染全局命名空间:

namespace direction {
    enum direction {
        LEFT,
        RIGHT,
        UP,
        DOWN,
        NONE
    };
}
namespace color {
    enum color {
       RED,
       GREEN,
       BLUE,
       NONE
    };
}

您还可以使用新的 C++11 方式(如果您的编译器支持的话)并使用“强类型枚举”

enum class direction {
    LEFT,
    RIGHT,
    UP,
    DOWN,
    NONE
};
enum class color {
   RED,
   GREEN,
   BLUE,
   NONE
};

两者都可以通过语法direction::NONE来使用或 color::NONE但有一个主要区别。在第一种情况下,枚举仍将隐式转换为整数。这意味着你可以写

int foo = direction::NONE;

一切都很好。

在第二种情况下,这将是一个编译器错误,因为 foo 与方向不同。你可以通过做来解决这个问题

direction foo = direction::NONE;

这可能适合您,也可能不适合您。如果需要转int,欢迎使用static_cast<int>(foo)获取整数类型。

关于c++ - 不同的枚举,相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19008590/

相关文章:

c++ - 我如何在 SDL2 窗口上使用 Cairo 绘制一条白色直线?

c++ - shared_ptr 的引入导致反序列化时出现段错误(使用 boost::serialization)

C++ 继承 - super.method() Java 等价物

c - 如何将字符串中的字符交换为枚举字符串?

Java 自定义枚举

scala - 访问(/导入)Scala 枚举

c++ - 使用 CPLEX (c++) 重置目标函数

c++ - 反序列化 STL 映射类成员

c - 为枚举分配类型是标准 C 语言吗?

regex - 扩展 [可选]、分组和 |或文本中的运算符