• Home
  • About
    • CodingGom's dev blog photo

      CodingGom's dev blog

      CodingGom의 개발 발자취

    • Learn More
    • Email
  • Posts
    • All Posts
    • All Tags
  • Projects

[Programming] 캐스팅연산자

12 Aug 2018

Reading time ~1 minute

캐스팅 연산자

코딩을하다가 실수형변수를 정수형으로 변환하기 위하여 (int)라는 것을 한적이 있는가? 이와 같은걸 캐스팅이라 한다. 사실 (int)와 같은건 좀 위험하다. 강제로 형태를 변환시키니까… 하지만 캐스팅이 필요한 경우가 있다. C++에서는 캐스팅을 조금이라도 더 안전하게 하려고 몇가지 등장한 캐스팅연산자들이 있다.


static_casst<>

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

dynamic_cast<>

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

const_cast<>

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

reinterpret_cast<>

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

이처럼 4가지의 캐스팅 연산자가 등장하면서 캐스팅연산을 좀더 안전하게(?) 할 수 있게 되었다.



CC++ Share Tweet +1