我有一个这样的枚举类:
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
?
答案 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;
}