在switch语句中使用enum和char

时间:2014-08-31 10:01:16

标签: c++ enums

我有一段代码,其中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,因为它们在执行时都给出了类似的结果?第二个代码如何在没有任何语法错误的情况下工作?

2 个答案:

答案 0 :(得分:2)

C和C ++可以在许多类型之间隐式转换。在这种情况下,整数类型intchar以及您的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值在有效范围内,就可以隐式转换intint。所以当你这样做时

storeValue = fifth;

然后它只是在storeValue中存储第五个值。在函数中,switch语句正在比较值。