类型转换枚举为整数,反之亦然

时间:2013-12-24 14:22:42

标签: c++ casting enums

我有一个枚举

enum MYENUM
{
  VAL_1 = 0,
  VAL_2,
  VAL_3
};

和两个分别具有整数和枚举作为参数的函数

void MyIntegerFunction(int integerValue)
{
...
}

void MyEnumFUnction(MYENUM enumValue)
{
...
}

我有两个变量

int intVar = 10;
MYENUM enumVar = VAL_2;

下面两种情况中的哪一种在调用这些函数时进行类型转换是正确的,为什么?

Case#1. MyEnumFUnction(static_cast<MYENUM>(intVar));
Case#2. MyIntegerFunction(static_cast<int>(enumVar));

PS:没有C ++ 11

1 个答案:

答案 0 :(得分:6)

enumint是明确的演员(假设C ++ 03其中enum基本上是int),将隐式执行没有问题。 intenum可能是错误的,因为它是一个缩小的广告,而不是每个int值都是有效的enum值。这就是为什么只能明确地将int投射到enum

同样适用于C ++ 11及更高版本的标准,但C ++ 11引入了强类型枚举和特定大小的枚举。 强类型枚举被声明为enum class而不仅仅是enum,除了用户定义的转换运算符或函数或强力({{1}之外,它不能转换为整数或任何其他类型。 }})。大小的枚举声明如下:static_cast。此特定枚举值的值为enum Colors : char {...},而不是默认值char