C++ 캐스팅(more effective c++ 02)

2015. 7. 25. 02:07프로그래밍/Effective C++

728x90
728x90

프로그래밍계의 1급 기피대상.

goto와 cast는 재앙이라고 한다...


C 스타일 캐스트?

C 스타일의 캐스트는 어떤 타입을 다른 타입으로 아무 생각 없이 바꿔주는 괴물!

- 캐스팅 다양성이 부족(상수성만 바꾼다던지. 파생 클래스 객체에 대한 포인터로 바꾼다던지?)

- 눈으로 찾아내기 힘든 버그가 많다.


static_cast

C 스타일 캐스트와 같다.


const_cast

상수성(constness)나 휘발성(volatileness)을 없애는 목적으로 사용하는 캐스팅


dynamic_cast

상속 계층 관계를 가로지르거나 하향시킨 클래스의 타입으로 안전하게 바꿔주는 캐스팅

제약 - 상속 계층 구조를 오갈때만 사용, 가상 함수가 없는 타입에는 적용할 수 없다.

* 어떤 객체가 차지하고 있는 메모리의 시작부분을 찾는 데에도 쓴다.


reinterpret_cast

컴파일러에 따라 다르게 정의된다. 직접 이식이 불가능하다.

흔한 용도는 함수 포인터 타입을 서로 바꾸는 것이다.

* 팜수 포인터의 캐스팅은 소스의 이식성을 떨어뜨린다.

(C++ 스펙에는 모든 함수 포인터를 똑같은 방법으로 나타내야 한다는 보장이 없다.)


추한 외모의 C++ 캐스팅!

컴파일러와 프로그래머에게 확실한 의미의 인식성을 보장.

보기에 깔끔하지 않고 타이핑이 어렵다.(타입 캐스팅은 피하는게 좋다?)

728x90
반응형