1. static_cast
: 형변환을 위해 사용하는 cast / C언어에서 (int) 와 비슷한 역할을 한다.
: 해당 클래스가 잘못된 캐스팅 시 유효성 검사를 하지 않는다.
: Ex)
//Upcasting과 Downcasting
CastBase* pStaticCast = new StaticCastTest(10, 0.5f, 1, "StaticCast");
CastBase* pUpCasting = static_cast<CastBase*>(pStaticCast);
StaticCastTest* pDownCasting = static_cast<StaticCastTest*>(pStaticCast);
//잘못된 Casting의 예 static_cast는 이와 같은 잘못된 캐스팅에 대한 처리가 없다.
CastBase* pCastBase = new CastBase(5.f, 15, "CastBase");
StaticCastTest* pDownCasting = static_cast<StaticCastTest*>(pCastBase);
CastBase* pStaticCast = new StaticCastTest(10, 0.5f, 1, "StaticCast");
DynamicCastTest* WrongCast1 = static_cast<DynamicCastTest*>(pStaticCast);
결과
더보기

쓰레기 값과 의도하지 않은 값이 출력

잘못된 캐스팅에 의해 크래시 발생 혹은 미정의 동작
코드 예시


2. dynamic_cast
: 형변환을 위해 사용하는 cast
: 해당 클래스가 잘못된 캐스팅을 하는 경우 nullptr 반환을 해준다.
//Upcasting과 Downcasting
CastBase* pStaticCast = new StaticCastTest(10, 0.5f, 1, "StaticCast");
CastBase* pUpCasting = dynamic_cast<CastBase*>(pStaticCast);
StaticCastTest* pDownCasting = dynamic_cast<StaticCastTest*>(pStaticCast);
//Dynamic 캐스팅
CastBase* pCastBase = new CastBase(5.f, 15, "CastBase");
StaticCastTest* pDownCasting = dynamic_cast<StaticCastTest*>(pCastBase);
CastBase* pStaticCast = new StaticCastTest(10, 0.5f, 1, "StaticCast");
CastBase* pUpCasting = dynamic_cast<CastBase*>(pStaticCast);
결과
더보기

잘못된 casting에 대해 nullptr 반환
코드 예시

3. const_cast
: const로 된 변수를 const_cast를 통해 보통의 변수로 캐스팅 할 수 있다.
//ConstCast
StaticCastTest* pStaticCast = new StaticCastTest(10, 0.5f, 1, "StaticCast");
PointerTest* pTest = const_cast<PointerTest*>(pStaticCast->GetPointerTest());
더보기

const * 리턴하는 경우

이와 같이 받아서 처리하므로 값 변경이 불가능.

const 키워드가 없으면 이와 같이 에러 발생

const_cast를 통해 이와 같이 값을 받을 수 있음.
코드 예시




4. reinterpret_cast
: 형에 상관 없이 Byte 단위의 캐스팅을 하는 reinterpret_cast.
WRITTEN BY
- KeithHong
개인 기록 공간입니다. 잘못된 정보에 대한 수정 및 조언은 항상 감사합니다 ( _ _ )
,