2014-08-31 2 views
1

switch 문에서 매개 변수로 enum을 사용하는 코드 조각이 있는데 예상대로 작동합니다.switch 문에서 enum과 char을 사용합니다.

#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); 
} 

변수 "storeValue"의 유형을 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); 
} 

enum 대신 char을 사용하면 실행시 비슷한 결과가 나옵니까? 구문 오류없이 두 번째 코드는 어떻게 작동합니까 ??

+0

'char'는 정수형입니다. – juanchopanza

+0

... 또한 열거 형은 int입니다. – alk

+0

범위가 지정되지 않은 열거자는 내부 형식으로 암시 적으로 변환 가능합니다. 또한'void main()'은 유효하지 않습니다. C++과'typedef enum {/*...*/} stuff;은 C-ism입니다. –

답변

2

C 및 C++은 많은 유형의 암시 적으로 변환 할 수 있습니다. 이 경우 정수형 intcharenum 등이 있습니다. 열거 형 값이 127을 넘지 않는 한 열거 형 값을 char로 변환하고 다시 반환하는 것은 완벽하게 허용됩니다 (그렇지 않은 경우).).

C 및 C++에서 char과 "8 비트 정수"는 기본적으로 같은 의미입니다. 그리고 int8_t (signed char), int16_t, int32_t 및 int64_t와 같은 비트 폭을 변환하는 것은 오류가 아닙니다.

+2

좋은 답변입니다. 변환을 막기 위해'enum class'가 추가되었습니다. (그러나 때때로 사용하기에 너무 어렵다). – firda

+1

'int'를 암시 적으로 'enum'값으로 변환 할 수는 없습니다. – MicroVirus

0

enum에서 요소 first, second, third ...에는 int 유형의 해당 값 0, 1, 2 ...이 있습니다. charintint 값이 유효한 범위 내에있는 한 암시 적으로 변환 될 수 있습니다. 그렇게 할 때

storeValue = fifth; 

그러면 storeValue에 5의 값을 저장하는 것입니다. 그리고이 함수에서 switch 문은 값을 비교합니다.

관련 문제