1. static_cast
- 논리적으로 변환 가능한 타입을 변환한다.
- 컴파일 타임에 형변환에 대한 타입 오류를 검사한다.
샘플 코드
int main()
{
// static_cast
int iData = 0;
float fData = 0.f;
iData = static_cast<int>(fData); // 논리적 형변환이 문제 없음
int* pIData = nullptr;
float* pFData = nullptr;
pIData = static_cast<int*>(pFData); // 에러 : 잘못된 형식 변환입니다.
return 0;
}
2. const_cast
- 포인터(Pointer), 참조(Reference)값의 const(상수성)을 제거해준다.
샘플 코드
int main()
{
// const_cast
const int* pIData = nullptr;
const float* pFData = nullptr;
pIData = const_cast<int*>(pFData); // 에러 : const_cast는 상수성만 제거 자료형을 바꿀 수 없다.
int number = 0;
const int& refIData = 0;
int& refIData2 = number;
refIData2 = const_cast<int&>(refIData); // const int&의 상수성을 제거해준다.
return 0;
}
3. reinterpret_cast
- 강제 형변환
- 임의의 포인터 타입끼리 변환을 허용한다.
(일반적으로 포인터 타입이 다르면 형변환을 허용하지 않는다.)
- pFData = reinterpret_cast<float*>(iData) 처럼 정수형도 변환이 가능하다.
샘플 코드
int main()
{
// reinterpret_cast
int* pIData = nullptr;
float* pFData = nullptr;
pFData = reinterpret_cast<float*>(pIData); // 컴파일 성공
int iData = 0;
pFData = reinterpret_cast<float*>(iData); // 컴파일 성공
return 0;
}
4. dynamic_cast
https://sentory.tistory.com/18?category=855992 참고 (비공개)
'C++' 카테고리의 다른 글
static ? (0) | 2019.07.17 |
---|---|
얕은 복사(Shallow Copy) 깊은 복사(Deep Copy) (0) | 2019.07.12 |
복사 생성자(Copy Constructor) (0) | 2019.07.11 |
레퍼런스(Reference)와 포인터(Pointer) 차이 (0) | 2019.07.10 |
다중 상속(Diamond of Death)의 문제점 (0) | 2019.07.10 |