enum class pid
{
Alpha, Beta, Gamma
};
int main()
{
int propId = 2;
switch(propId)
{
case pid::Alpha:
case pid::Beta:
case pid::Gamma:
break;
}
}
以上片段在 msvc2012 中编译良好(并且有效)但在 clang-3.4 和 g++-4.8 中失败。这些需要 static_cast<pid>(propId)
在 switch 子句中使用。
顺便说一下,没有显式转换的简单赋值,例如 pid a = propId;
在每个编译器中给出错误。
谁做对了?
最佳答案
标准第 4 条,“标准转换”,仅列出无作用域枚举。因此,强枚举不有任何标准转换,您必须在任一方向使用static_cast
。
您可能会争辩说,这种明确性是强枚举的全部意义所在。它们不是一蹴而就的整数,而是需要明确的意图声明。请注意 [谢谢,@DyP] switch
语句明确支持强枚举并且不需要需要手动转换为某种整数类型。
关于c++ - 在 switch 语句中从 int 到 enum 类的隐式转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20870403/