본문 바로가기
Language/C++

C++의 캐스팅 연산자

by W00gie 2021. 3. 25.

캐스트 연산자는 변수의 타입을 강제로 변환하는데 사용된다.

강제로 변환하는만큼 부작용이 있고 호환되지 않는 타입을 무리하게 캐스팅하는 경우 허가되지 않는 영역에 관여하게 되며 프로그램이 다운되는 경우도 종종 발생된다.

 

C++은 기본 연산자외에 '기능을 축소하고 엄격한 규칙을 적용한' 4가지 캐스팅 연산자를 추가로 제공한다.

각각의 캐스팅 연산자는 캐스팅하는 영역에 차이점을 두어 알맞게 사용할 경우 안정성을 제공한다. (reinterpret제외)

연산자명  형식 기능
static_cast static_cast<int>(d) 변환가능한 타입만 변환
dynamic_cast dynamic_cast<Child *>(Parent) RTTI 참조, 부모-자식 안전한 변환허용
const_cast const_cast<int *>(p) 포인터의 상수성 변경
reinterpret_cast reinterpret_cast<char *>(p) 포인터간의 캐스팅

 

static cast 

- 포인터의 타입을 다른것으로 변경하는 것은 금지된다.

- 상속관계에 있는 포인터끼리는 변경 가능하다. 다만 다운캐스팅 시 안정성이 체크되지 않으므로 주의할 것.

 

dynamic_cast

- RTTI 정보를 참조했을때 안전한 변환이 아닌 경우 NULL 리턴.

- 레퍼런스 타입도 변환 가능하지만 변환불가할 때 NULL 대신 bad_cast exception을 던진다. (try catch 구문 사용필요)

 

const_cast

- 생략

 

reinterpret_cast

- 모든 포인터타입끼리의 변환허용

- 정수형과 포인터간의 변환도 허용된다. 다만 굉장히 위험하므로 사용 자제할 것.