在 C++ 中,允许具有不对应于任何枚举器的枚举类型的值,只要它们在范围内:
enum class E { X = 1, Y = 2 };
E z = static_cast<E>(0);
这样的值可以切换吗?也就是说,
void f(E a) {
switch(a) {
case E::X: // something
case E::Y: // something else
// somehow check if it's the same as z
default: // something else again
}
}
我希望不是,但想确认一下,如果是,我会很高兴。
我所知道的不令人满意的选择:
switch(static_cast<int>(a)) {
case 1: // something
case 2: // something else
case 0: // the z case
default: // something else again
}
或
if (a == E::X) {
// something
} else if (a == E::Y) {
// something else
} else if (static_cast<int>(a) == 0)
// the z case
} else {
// something else again
}
答案 0 :(得分:1)
应该这样做:
enum class E { X = 1, Y = 2 };
constexpr E z = static_cast<E>(0);
void f(E a) {
switch (a) {
case E::X: // ...
case E::Y: // ...
case z: // ...
default: // ...
};
}