static_cast
- 가장 일반적으로 사용되는 캐스팅
- "컴파일 시간" 에 수행되며, 기본 데이터 타입, 클래스, 포인터, 레퍼런스 등 간의 형변환에 사용됩니다.
dynamic_cast
- 상속 관계에서의 안전 변환 당형성을 활용하는 방식이므로 하나의 virtual함수가 있어야함
- "런타임 시" 에 수행되며, 주로 기본 클래스에서 파생 클래스로의 안전한 형변환을 지원합니다.
- 변환이 되는경우에만 캐스팅을 해주고 안되는경우엔 "0" 으로 밀어줌
const_cast
- const 한정자를 추가하거나 제거하는 데 사용됩니다.
- 주로 상수성을 무시하고 변수를 수정하거나, 상수성을 부여하여 변수를 읽는 데 사용됩니다.
reinterpret_cast
- 강력하고, 위험한 타입변환
- 전혀 관계없는 다른 타입으로 변환
- ex)
Player* p1 = new Player();
Dog* dog = reinterpret_cast<Dog*>p1;
intptr_t address = reinterpret_cast<intptr_t>(포인터)