我有一段代码,其中enum作为switch语句中的参数,它按预期工作。
#include <iostream>
typedef enum
{
first=0, second=1, third, fourth, fifth, sixth
}enumValue;
void enumFunction(enumValue val)
{
switch(val)
{
case first : std::cout<<"1\n";
break;
case second : std::cout<<"2\n";
break;
case fifth : std::cout<<"5\n";
break;
default : std::cout<<"No value\n";
}
}
void main()
{
enumValue storeValue;
storeValue = fifth;
enumFunction(storeValue);
}
当我更改变量类型&#34; storeValue&#34;对于char,代码仍然提供与以前相同的结果。我无法弄清楚为什么当传递的参数被更改时代码仍然有效。以下是对参数进行更改后的代码。
#include <iostream>
typedef enum
{
first=0, second=1, third, fourth, fifth, sixth
}enumValue;
void enumFunction(char val)
{
switch(val)
{
case first : std::cout<<"1\n";
break;
case second : std::cout<<"2\n";
break;
case fifth : std::cout<<"5\n";
break;
default : std::cout<<"No value\n";
}
}
void main()
{
char storeValue;
storeValue = fifth;
enumFunction(storeValue);
}
是否使用了char而不是enum,因为它们在执行时都给出了类似的结果?第二个代码如何在没有任何语法错误的情况下工作?
答案 0 :(得分:2)
C和C ++可以在许多类型之间隐式转换。在这种情况下,整数类型int
和char
以及您的enum
等等。完全允许将枚举值转换为字符并再次返回,只要您的值为enum不要超过127(他们没有)。
在C和C ++中,char
和“8位整数”基本相同。在int8_t(signed char),int16_t,int32_t和int64_t之类的位宽之间进行转换并不是错误。
答案 1 :(得分:0)
在enum
中,元素first,second,third ......有相应的值0,1,2 ......类型为int
。只要char
值在有效范围内,就可以隐式转换int
和int
。所以当你这样做时
storeValue = fifth;
然后它只是在storeValue
中存储第五个值。在函数中,switch
语句正在比较值。