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

ont*_*cks 3 c++ enums casting

我有一个枚举

enum MYENUM
{
  VAL_1 = 0,
  VAL_2,
  VAL_3
};
Run Code Online (Sandbox Code Playgroud)

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

void MyIntegerFunction(int integerValue)
{
...
}

void MyEnumFUnction(MYENUM enumValue)
{
...
}
Run Code Online (Sandbox Code Playgroud)

我有两个变量

int intVar = 10;
MYENUM enumVar = VAL_2;
Run Code Online (Sandbox Code Playgroud)

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

Case#1. MyEnumFUnction(static_cast<MYENUM>(intVar));
Case#2. MyIntegerFunction(static_cast<int>(enumVar));
Run Code Online (Sandbox Code Playgroud)

PS:没有C++ 11

Vio*_*ffe 9

enumint被明确的铸造(假定C++ 03,其中enum基本上是一个int),将被隐式进行也没有问题.int可能enum是错误的,因为它是一个缩小的演员,并非每个int值都是有效值enum.这就是为什么铸造intenum,才可能明确.

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