2016-07-10 4 views
4

나는 GCC-5, 컴파일러는 다음과 같은 시나리오에서 static_cast를 사용할 수 없다고하여,C++ (11) 주조 열거는

enum side : int {_white=0, 
       _yellow=1, 
       _green=2, 
       _blue=3, 
       _red=4, 
       _orange=5}; 

그러나 형식화 된 열거를 그게 뭐야? static_cast<int>(value))을 실행해도 오류가 발생하지 않습니다.

+2

다른 유형으로, 'reinpterpret_cast'를 사용하지 않아야합니까? –

+5

bool을 double로 변환 할 수는 있지만 bool 포인터를 의미있는 이중 포인터로 처리 할 수있는 것은 아닙니다. –

+0

입력 된 열거 형이 본질적으로 동일한 데이터 유형이라고 생각 했습니까? 'int' 형식이기 때문에 컴파일러는'static_cast'를 받아 들일 수 있어야합니까? 분명히'reinterpret_cast'를 사용하면 효과가 있지만 코드 냄새가납니다. –

답변

5

포인터 유형 캐스트는 유형 변환과 다릅니다. 포인터를 통해 액세스하면 바이트가 동일하게 유지되지만 서로 다르게 읽습니다. 이것은 이 아닌은 int의 크기가 다를 수 있기 때문에 열거 형에 안전합니다.

형식 변환은 enum을 복사본으로 int로 변환하기 때문에 안전합니다. 원래의 열거 형은 1 바이트 또는 2 바이트가 될 수 있지만, 4 바이트 또는 8 바이트로 복사되면 문제가되지 않습니다.