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

Type-casting enum to integer and vice versa

本文关键字:反之亦然 整数 枚举 类型转换      更新时间:2023-10-16

我有一个枚举

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

enumint是明确的强制转换(假设C++03,其中enum基本上是一个int),将隐式执行没有问题。 int to enum 可能是错误的,因为它是缩小强制转换,并非每个int值都是有效的enum值。这就是为什么只能显式地将int转换为enum的原因。

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