c++ 에서는 가급적 c style cast 보다
static_cast
dynamic_cast
reinterpret_cast
const_cast
사용하자
이중 일단 static_cast 를 써야 하는 이유를 살펴보자
int integerValue = 1; char charValue = 'c'; printf("int value >%d \n", integerValue); printf("char value >%c \n", charValue); int* integerPointer = (int*)(&integerValue); printf("int value by case pointer >%d \n", *integerPointer); int* char2integerPointer_cstyle = (int*)(&charValue); printf("int value by wrong cast >%d \n", *char2integerPointer_cstyle); char* int2charPointer_cstyle = (char*)(&integerValue); printf("int value by wrong cast >%c \n", *char2integerPointer_cstyle); int* char2integerPointer_cxxstyle = static_cast<int*>(&charValue); // compile errror!! printf("int value by wrong cast >%d \n", *char2integerPointer_cxxstyle); char* int2charPointer_cxxstyle = static_cast<char*>(&integerValue); // compile errror!! printf("int value by wrong cast >%d \n", *int2charPointer_cxxstyle);
위 코드는
int 형 변수 하나 char 형 변수 하나를
서로 반대의 pointer 로 casting 할 경우에 대해서 테스트 한다
실제로 아래 두가지 케이스의 경우 c++ style 의 static_cast 를 사용 하며 서로 casting 될수없는 혹은 캐스팅 될수 있더라도 문제될 수 있을 경우 컴파일 오류를 출력한다
만약 의도한 코드라면 int > char 의 경우 정상적일 가능성이 매우 적을 것이고 반대의 경우 char 의 사이즈 보다큰 값을 갖고 있을때는 의도와 다른값을 갖게 될 수 있다
가급적이면 c++ 에서는 c++ style 의 casting 을 사용하도록 하자
물론- casting 하지 않는 필요 없는 코드가 더 좋지만….
댓글 남기기