如果将整数强制转换为枚举类,但枚举中不存在该值会怎样?例如:我想要一个函数来测试整数是否具有来自枚举类的某个值:

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/

10-13 08:09