kunyoungparkk

[C++] 형 변환 연산 본문

C++

[C++] 형 변환 연산

박건영 2022. 1. 7. 01:29

C++로 개발할 때는, 형 변환시에 C스타일의 괄호 대신 형 변환 연산자를 사용하는 것이 바람직하다.

형 변환 연산자 컴파일 타임 런 타임
dynamic_cast 업캐스팅/다운캐스팅 허용, 클래스 타입만 부모 -> 자식 캐스팅의 경우, 실제로 캐스팅 가능하다면 허용 (다운캐스팅)
static_cast 업캐스팅/다운캐스팅 허용, 원시 타입 / 클래스 타입 모두 가능 x
reinterpret_cast (=C 스타일) 모두 허용 x
const_cast const를 붙이거나 뗀다. x

 

가장 많이 사용하는 static_cast와 dynamic_cast의 차이점은

런타임에 다운캐스팅이 가능한지 검증을 하느냐, 마느냐다. (원시 타입 지원 여부도 다르다.)

 

static_cast는 잘못된 다운캐스팅이어도 컴파일이 된다.

그러나 dynamic_cast는 런타임에 실제 저장된 객체 기준으로,

부모 -> 자식 캐스팅을 허용하지 않고, 이 경우 NULL을 반환한다.

 

즉, 부모(기초) 클래스의 타입으로 존재하는 자식(유도) 클래스의 객체를 자식 클래스 타입으로 변형하는 것을 허용하면서,

부모클래스 객체가 자식 클래스 타입으로 캐스팅되는 것 등을 막기 위해서 dynamic_cast를 사용한다.

 

동작 원리는, 가상함수 테이블을 통하여 연산자 내부에서 실제 객체를 구분짓는다.

 

reinterpret_cast는 C에서 괄호로 묶어서 형변환한 결과와 일치한다.

const_cast는 const를 붙이거나 떼거나 할 때 사용한다.

 

이런 형 변환 연산자들은 각각 static_cast (8~90%), dynamic_cast(10%), reinterpret_cast / const_cast (1%) 의 빈도로 사용된다고 한다.

'C++' 카테고리의 다른 글

[C/C++] 소켓 API  (0) 2023.04.06
[C++] 템플릿  (0) 2022.01.07
C++ 정리  (0) 2022.01.06
비트맵(.bmp) 파일 구조  (0) 2022.01.06
[C/C++] 파일 패킹  (0) 2022.01.06