我有一个枚举
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
答案 0 :(得分:6)
enum
到int
是明确的演员(假设C ++ 03其中enum
基本上是int
),将隐式执行没有问题。 int
到enum
可能是错误的,因为它是一个缩小的广告,而不是每个int
值都是有效的enum
值。这就是为什么只能明确地将int
投射到enum
。
同样适用于C ++ 11及更高版本的标准,但C ++ 11引入了强类型枚举和特定大小的枚举。
强类型枚举被声明为enum class
而不仅仅是enum
,除了用户定义的转换运算符或函数或强力({{1}之外,它不能转换为整数或任何其他类型。 }})。大小的枚举声明如下:static_cast
。此特定枚举值的值为enum Colors : char {...}
,而不是默认值char
。