14

我有一个这样的枚举类:

    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

4

2 回答 2

16

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

于 2013-02-19T21:45:45.883 回答
13

因为 C++11强类型枚举在设计上不能隐式转换为整数类型。底层类型是 an 的unsigned int事实并不意味着枚举的类型是unsigned int。它是BinaryInstructions

但是你实际上并不需要转换因为arg它是一个无符号整数,你需要一个强制转换,但为了清楚起见你应该更喜欢 a static_cast

switch(arg)
{
    case static_cast<unsigned int>(BinaryInstructions::END_INSTRUCTION) :
        return "end";
    break;
}
于 2013-02-19T21:44:57.570 回答