Cpp - 캐스팅 연산자

eelijus·2022년 6월 2일
0

Cpp/C++

목록 보기
9/10

uintptr_t


포인터의 주소를 저장하기 위해 사용하는 타입. 결국 int타입이다.
다른 환경으로 이식이ㅣ 가능하고, 안전한 포인터 선언 방법을 제공
시스템 내부에서 사용하는 포인터와 같은 크기
포인터를 정수 표현으로 변환할 때 유용하게 사용할 수 있다.

Typeinfo 라이브러리

https://runebook.dev/ko/docs/cpp/header/typeinfo

Dynamic cast

안전한 다운캐스팅에 사용되는 캐스트. 물론 업캐스팅에도 쓰임
부모 클래스의 포인터에서 자식클래스의 포인터로 다운 캐스팅 해주는 연산자
(부모 클래스의 포인터가 실제로 뭘 가리키고 있는지가 중요)

dynamic_cast<바꾸려는 새로운 타입>(대상)
dynamic_cast<childClass*>(Parent);

성공 시 : new_type의 value 리턴
실패시 : 뉴타입이 포인터인 경우는 null pointer, 뉴타입이 레퍼런스인 경우 exception 처리

예 ) 부모클래스의 생성자로 생성되었고, 부모 포인터가 가리키고 있는 클래스를 자식클래스 포인터로 형변환 할때 사용
예 ) 자식클래스의 생성자로 생성되었고, 부모 클래스의 포인터가 가리키고 있는 클래스를 자식클래스로 형변환 할때

  1. Const cast
    상수성(const)를 없애는 데 사용
  2. Reinterpret cast
    어떠한 포인터 타입도 어떠한 포인터 타입으로 변환 가능. 정수타입 -> 포인터타입, 그 반대도 가능.이 연산자가 적용된 후의 결과는 거의 항상 컴파일러에 따라 다르게 정의되어있어서 사용이 지양됨.
  3. Static cast
    c 스타일 캐스터와 똑같은 의미와 형변환 능력을 갖고 있는, 가장 기본적인 캐스트 연산자. 이런 이름이 붙은 이유는 형변환에 대한 타입체크를 runtime에 하지않고, compile 타임에 정적으로 수행하기 때문이란다. 업캐스팅도 가능하다. 자식클래스의 생성자로 생성되었고, 자식클래스 포인터가 가리키고 있는 클래스를 부모클래스로 형변환할때는 static_cast를 사용한다.
  4. Dynamic cast
    런타임에 동적으로 상속 계층 관계를 가로지르거나 다운캐스팅 시 사용되는 캐스팅 연산자. 즉, 기본 클래스 객체에 대한 포인터나 참조자의 타입을 파생 클래스, 혹은 형제 클래스의 타입으로 변환해줌.
    Dynamic cast는 다형성을 띄지 않은(virtual 멤버 함수가 없는) 객체간 변환은 불가능하며, 시도시 컴파일 에러가 발생함.
profile
sujileelea

0개의 댓글