c++ 使用强类型枚举切换语句

在switch语句中使用强类型的枚举是否有一种避免显式转换为int的方法?

/// @desc an enumeration of the states that the session can be in.
enum class State
{
    Created,    
    Connected,  
    Active,
    Closed
};

State sesState = session->GetState();

switch (static_cast<int>(sesState))
{
    case static_cast<int>(Session::State::Created):
    // do stuff.
    break;

    case static_cast<int>(Session::State::Connected):
    // do stuff.
    break;
}

从n3242草案:

6.4.2 switch语句[stmt.switch]

2条件应为整数类型,枚举类型或存在单一非显式转换函数到集成或枚举类型的类型(12.3).

枚举类型是否包含强类型枚举,或者它们与switch语句不兼容,因为它们需要显式转换为int?

最佳答案
枚举类型仍然是枚举类型,即使是否强制类型,并且在switch语句中一直工作正常.

看到这个程序,例如:

#include <iostream>

enum class E
{
    A,
    B
};

int main()
{
    E e = E::A;

    switch (e)
    {
    case E::A:
        std::cout << "A\n";
        break;
    case E::B:
        std::cout << "B\n";
        break;
    }
}

其输出为“A”.

转载注明原文:c++ 使用强类型枚举切换语句 - 代码日志