본문 바로가기

프로그래밍/공부관련

c++ 사용 cast (캐스트 연산자)

긴설명보다 이정도?


다만, 실제적으로 일하면서 쓸경우는 c++의 캐스트연산자는 안쓰고, 아직도 c의 캐스트 연산자 즉 평소 아무생각없이 사용하는 형태로만 주로 써왔다. static_cast가 아마 비슷하겠지만, 좀 더 컴파일러 단에서 오류를 뱉어내서 좀 더 실수를 줄여주는 정도일 것이다.


const, reinterpret는 잘은 사용안하지만, 

그나마 프로페셔널한 코드에서 주로 보이는 것은 dynamic_cast이다.


상속관계에서 업캐스트와 다운캐스트를 자주 변환하고 한다. 

업캐스트는 항상 캐스팅이 가능할지몰라도, 다운캐스트는 상황에 따라 다르다.


만약 올바른 상황에서 c의 캐스트연산 혹은 static_cast를 쓴다면 문제는 없겠지만, 그렇지 않을경우 잘못된 캐스트가 발생되어 런타임에 오류가 발생할 것이다.

그래서 dynamic_cast를 통해 내부적으로 RTTI 체킹을 통해 캐스팅을 진행하여 잘못된 캐스트시 널포인트를 리턴하게 되어 그나마 실수를 줄일수 있는 코드가 될수있다.




표는 http://soen.kr에서 퍼옴

캐스트 연산자

변환 형태

static_cast

상속 관계의 클래스 포인터  레퍼런스기본 타입타입 체크 안함

dynamic_cast

상속 관계의 클래스 포인터  레퍼런스타입 체크. RTTI 기능 필요

const_cast

const, volatile 등의 속성 변경

reinterpret_cast

포인터끼리포인터와 수치형간의 변환