如果将整数强制转换为枚举类,但枚举中不存在该值会怎样?例如:我想要一个函数来测试整数是否具有来自枚举类的某个值:
enum class EnumClass { A, B = 4, C = 9, D = 60 };
bool checkEnumClass( int v )
{
switch( static_cast< EnumClass >( v ) )
{
case EnumClass::A:
case EnumClass::B:
case EnumClass::C:
case EnumClass::D:
return true;
default:
return false;
}
}
checkEnumClass( 0 ) == true;
checkEnumClass( 7 ) == false; // is this true?
这是检查整数是否可转换为枚举的正确方法吗?
最佳答案
枚举值可以包含其最大值和最小值之间的任何值,因此您拥有的大部分内容都是正确的。您唯一需要做的另一件事是确保integer参数在适当的范围内,因为如果您尝试强制转换超出枚举范围的int,则您将具有未定义的行为:
bool checkEnumClass( int v )
{
if (v < static_cast<int>(EnumClass::A)) return false;
if (v > static_cast<int>(EnumClass::D)) return false;
switch( static_cast< EnumClass >( v ) )
{
case EnumClass::A:
case EnumClass::B:
case EnumClass::C:
case EnumClass::D:
return true;
default:
return false;
}
}
关于c++ - 在枚举中转换整数的安全方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17811179/