我有一个枚举
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
enum
to int
是明确的强制转换(假设 C++ 03 其中enum
基本上是一个int
),将隐式执行没有问题。int
to enum
可能是错误的,因为它是缩小范围,而不是每个int
值是有效的enum
价值。这就是为什么铸造int
to enum
只能明确地进行。
C++ 11 及更高版本的标准也是如此,但 C++ 11 引入了强类型枚举和特定大小枚举。
声明强类型枚举enum class
而不是仅仅enum
,并且它不能转换为整数或任何其他类型,除了用户定义的转换运算符或函数,或强力(static_cast
)。大小枚举的声明如下:enum Colors : char {...}
。这个特定枚举的值将有char
键入而不是默认值int
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)