是否可以使两个不同的枚举具有相同的值? 例如,
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/