【发布时间】:2020-06-30 08:54:44
【问题描述】:
我想将旧样式的 enum 更改为 enum class : int 因为它自己的范围。
但是编译器抱怨在整数算术中使用这些值。 但是为什么 - 因为枚举被显式键入为 int?
示例:
enum class MsgType : int {
Output = 1,
Input = 2,
Debug = 3
};
enum class MsgSender : int {
A = 1,
B = 2,
C = 3
};
// later in code
int id = (MsgType::Input << 16) + (MsgSender::A);
生产
错误 C2678:二进制“
这对我来说似乎有些不合逻辑。
编辑:
我完全意识到投掷它们的可能性。但是如果我不希望它们是可转换的,我为什么要将类型指定为int。特别是如果语法暗示某种“继承自int”
【问题讨论】:
-
您在换档前尝试过投射吗?枚举上可能没有移位运算符。
-
因为它仍然是
class,而不是int。这就是enum class的意义所在,它是一种专用类型,而不仅仅是整数的别名 -
抱歉,但您切换到类型安全的枚举并期望它不是类型安全的似乎不合情理。这就是新旧枚举之间的主要区别
-
@UnholySheep 我想将枚举值更多地与对象进行比较,因为它像一个对象一样使用。在这种情况下,是一个派生自
int的类的对象 -
是的,语法类似。但不,这并不意味着相同。不幸的是,但没什么特别的。
标签: c++ enum-class