C언어의 형변환(Type Casting)의 경우, 타입 체크를하지 않아서 버그를 유발할 수 있어
컴파일 단계에서 Warning이 뜨거나 에러가 발생하는 경우가 많고,
실제로 원치 않는 데이터 유실이 발생할 수도 있다.
C++에서는 4가지 Type Cast Operation을 제공한다.
- static_cast
- 컴파일 단계에서 타입체크를 수행한다.
- child class의 포인터를 parent class로 캐스팅한다.
- parent class의 포인터를 child class로 캐스팅한다. (child class만의 variable/method 사용 불가)
- 기본적 타입들에 대한 변환에 사용
- runtime check를 하지 않는다.
- const_cast
- 컴파일 단계에서 타입체크를 수행한다.
- 타입에 const, volatile 키워드를 붙이거나 땔때 사용한다.
- dynamic_cast
- runtime 시에 동작한다.
- 객체를 상속 관계 속에서 캐스팅 하는 등 객체의 포인터에만 사용한다.
- virtual method를 가지는 클래스에서 사용하며, 그렇지 않은 경우는 static_cast를 사용하면 된다.
- 만약 주어진 포인터가 캐스팅하기에 적절하지 않으면 NULL을 리턴한다.
- dynamic_cast의 종류
- upcast
child class를 parent class로 캐스팅 - donwcast
parent class를 child class로 캐스팅 - crosscast
다중 상속 시 사용 - reinterpret_cast
- 포인터를 어떤 타입으로든 캐스팅할 수 있다.
- 강력하지만 위험, C언어의 형변환과 가장 유사해 보인다.
댓글 없음:
댓글 쓰기