枚举类“无法转换为unsigned int”

时间:2013-02-19 21:43:00

标签: c++ casting enum-class

我有一个这样的枚举类:

    typedef unsigned int binary_instructions_t;

    enum class BinaryInstructions : binary_instructions_t
    {
        END_INSTRUCTION = 0x0,

        RESET,

        SET_STEP_TIME,
        SET_STOP_TIME,
        START,

        ADD
    };

我试图在这样的switch语句中使用枚举的成员:

const std::string& function(binary_instructions_t arg, bool& error_detect)
{
    switch(arg)
    {
        case (unsigned int)BinaryInstructions::END_INSTRUCTION:
            return "end";
        break;
    }
    translate_error = true;
    return "ERROR";
}

为什么在底层类型已经是(unsigned int)时需要转换为unsigned int

2 个答案:

答案 0 :(得分:12)

那是因为“enum class”是“强类型”,因此不能隐式转换为任何其他类型。 http://en.wikipedia.org/wiki/C%2B%2B11#Strongly_typed_enumerations

答案 1 :(得分:11)

因为C ++ 11 strongly typed enums不能通过设计隐式转换为整数类型。基础类型为unsigned int的事实并不意味着枚举的类型为unsigned int。它是BinaryInstructions

但是你实际上并不需要转换由于arg是无符号整数,你需要一个强制转换,但为了清晰起见你应该更喜欢static_cast:< / p>

switch(arg)
{
    case static_cast<unsigned int>(BinaryInstructions::END_INSTRUCTION) :
        return "end";
    break;
}