본문 바로가기

C++

C++ Type Cast

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 참고 (비공개)