캐스트 연산자는 변수의 타입을 강제로 변환하는데 사용된다.
강제로 변환하는만큼 부작용이 있고 호환되지 않는 타입을 무리하게 캐스팅하는 경우 허가되지 않는 영역에 관여하게 되며 프로그램이 다운되는 경우도 종종 발생된다.
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
- 모든 포인터타입끼리의 변환허용
- 정수형과 포인터간의 변환도 허용된다. 다만 굉장히 위험하므로 사용 자제할 것.
'Language > C++' 카테고리의 다른 글
Sort 함수의 커스터마이징, 특정 조건 정렬 (0) | 2021.10.04 |
---|---|
PS에 필요한 String 컨테이너 기본 지식 (0) | 2021.09.09 |
템플릿 함수 사용시 유의사항 (0) | 2021.03.02 |
Has A 관계를 표현하는 클래스 활용 기법 - 포함(Containment) (0) | 2021.02.22 |
정적 멤버 변수, 함수 (0) | 2021.02.15 |