{
정말 여러가지 이유가 있지만 대표적으로 꼽자면, 가독성이 떨어진다는 점과, reinterpret_cast 보다 더 강력한 cast 이기 때문이다.

그 강력함 중 하나를 설명한다. 포인터는 그 정의가 보이지 않더라도 전방선언으로 마치 보인것 처럼 컴파일러를 속여 컴파일 하게 할 수 있다. 이러한 상태에서 형 변환을 하게 되면, 정의가 보이지 않는데도 형 변환이 가능하게 된다. 이때 해당 정의가 보이지 않기 때문에 메모리 레이아웃을 맞추지 못하고 결국 어떤 일을 할지 모르는 포인터가 만들어 지게 된다.

그런데 VC 2008 에선 .. 잘 된다.. 해당 소스 코드를 첨부 하오니, 한번 테스트 해 보심이 좋을 것 같다.

Func.cpp 의 7 라인에 break point 를 걸어서, dp의 멤버 변수가 있고 어떻게 초기화 되었는지 확인해 봄으로써 되는 컴파일라와 안되는 컴파일러를 구분 지을 수 있겠다.

Func.cpp

Func.h

Base.cpp

Base.h

Derived.h

Derived.cpp

main.cpp


총 파일 7개 이고 한번 컴파일 하여 테스트해 보길... C++ 캐스팅을 사용하면, 정의가 보이지 않는한 컴파일 되지 않는 것을 확인 할 수 있다.  그런 이유로 C 캐스팅 말고 C++ 캐스팅을 사용하자. 물론 사용 안할 수 있다면 사용 안하는게 더 좋다.
}


저작자 표시
신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요