c++ - 在 switch 语句中从 int 到 enum 类的隐式转换

标签 c++ c++11 type-conversion enum-class

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/

相关文章:

c++ - C++ Stringstream初始化

c++ - 带有 std::all_of( ) 和 std:none_of( ) 的空容器的好用法?

c# - 生成十进制类型的往返字符串

clojure - Clojure 中的 PGobject 类型转换

c++ - 强制所有类在多级继承层次结构中实现/覆盖 'pure virtual' 方法

c++ - 通过 C 中的辅助矩阵求解线性方程组

c++ - 停止计算运算符<<

c++ - 好友声明不转发声明

C++更改构造函数中的函数解析优先级

php - Mysql查询比较字符串(varchar)作为整数