[C/C++] 캐스팅연산자

2022. 4. 8. 23:44Programming language/C, C++

    목차

이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다.

 

서론

코딩을 하다가 실수형 변수를 정수형으로 변환하기 위하여 (int)라는 것을 한 적이 있나요? 이와 같은걸 캐스팅, 한국말로는 형 변환이라고 합니다. 사실 (int)와 같은 일반적인 명시적 형 변환은 좀 위험합니다. 강제로 형태를 변환시키니…

하지만 캐스팅이 필요한 경우가 확실히 있습니다. C++에서는 캐스팅을 조금이라도 더 안전하게 하려고 몇 가지 등장한 캐스팅 연산자들이 있습니다. 이번 글에서는 캐스팅 연산자들에 관하여 특징만 간단히 다뤄보려 합니다.

 

살펴볼 캐스팅 연사자들은 다음과 같습니다.

  • static_cast<>
  • dynamic_cast<>
  • const_cast<>
  • reinterpret_cast<>

캐스팅 연산자들은 <...>의 타입으로 캐스팅을 해줍니다. ex) static_cast<int> : int 형태로 캐스팅


static_cast<>

  • 기본 데이터 타입 간의 캐스팅에 주로 이용
  • 형 변환에 대한 타입 체크를 컴파일 타임에 정적으로 수행
  • 상속관계에 있는 클래스 간의 계층 변화
    • 런타임 검사 이용 X
    • RTTI 꺼져있어도 됨
    • 다중 상속에서는 기본 클래스 간의 타입 변화 불가
  • 서로 다른 타입의 포인터 간 변화 불가능

dynamic_cast<>

  • 상속관계의 클래스 간에 포인터나 참조자의 타입을 다운 캐스팅하거나 기본 클래스 간의 안전한 캐스팅에 이용
  • 캐스팅 대상이 하나 이상의 가상 함수를 가지고 있어야 함
  • 캐스팅하는 대상은 반드시 클래스의 포인터 형이거나 참 조형이어야 함
  • 런타임 때 타입 검사를 해야 함. RTTI 옵션이 켜져 있어야 함
  • 캐스팅 성공 여부를 리턴해줌 => 안전한 캐스팅

const_cast<>

  • 포인터나 참조자의 상수 성을 제거
  • 상수성 제거용으로만 사용될 수 있음

reinterpret_cast<>

  • 강제형 변환
  • 상관관계, 상속관계에 없이 서로 간의 타입 캐스팅을 시킴
  • 상수성 제거는 할 수 없음
  • 사실상 C타입 캐스팅 다음으로 위험한 캐스팅 연산자
반응형
LIST