[c++] 타입 캐스팅 방식(형변환)
C언어에서 제공하는 타입캐스팅
int i1 = (int)myFloat;
C++에서 제공하는 네 가지 타입캐스팅 + @
-
static_cast
언어에서 지원하는 가장 일반적인 타입캐스팅
int n = 9; double result = static_cast<double>(n);
객체를 클래스 계층에서 다운캐스팅할 때 사용 가능
객체 참조형에서 사용 가능(객체 자체 X)
Parent* parent = new Parent(); Child* child = static_cast<Child*>(parent);
-
dynamic_cast
런타임 타입 정보 검사를 수행하여 변환이 적합한 클래스 계층 간 이동인지 확인
런타임 타입 정보는 vtable에 저장되기 때문에 dynamic_cast가 타입 검사를 하기위해서는 클래스에 하나 이상의 virtual 메서드가 있어야 함
-
const_cast
상수 속성을 없애는 캐스팅 방법
라이브러리를 사용하는 등의 상황에서 융통성을 발휘하여 사용하는 경우가 있음
//예시 extern void LibraryMethod(int* n); void myMethod(const int* n) { LibraryMethod(const_cast<int*>(n)); }
-
reinterpret_cast
static_cast 보다 강력한 캐스팅 방법
전혀 관계없는 타입으로 변환 가능
T1* tp = new T(); T2* tp2 = new T2(); tp = reinterpret_cast<T1*>(tp2);
- 타입 생성자 함수 이용
int n = int(myFloat);
-
타입캐스팅 방법 정리
상황 캐스팅 방법 const 속성 제거 cosnt_cast int, double 간 변환처럼 언어 자체에서 허용되는 변환을 명시적으로 수행 static_cast 커스텀 생성자나 변환 연산자가 구현되어 있을 때의 명시적인 변환 static_cast 전혀 관계없는 두 객체 간의 변환 불가능 같은 클래스 계층에 속하는 서로 다른 클래스 객체의 포인터 간 변환 dynamic_cast or static_cast 같은 클래스 계층에 속하는 서로 다른 클래스 객체의 참조 간 변환 dynamic_cast or static_cast 전혀 관계없는 두 포인터 간의 변환 reinterpret_cast 전혀 관계없는 두 참조 간의 변환 reinterpret_cast 함수 포인터 간의 변환 reinterpret_cast
-
결론
기본 자료형의 타입캐스팅은
double myD = 1.1; int n = (int)myD; int n2 = int(myD);
와 같은 방식으로 변환하는 것이 가독성에 더 좋아보이며
이를 제외하고는 위에 설명한 타입캐스팅 방식을 활용하여
명시적으로 보여주는 것이 좋아 보임
Author And Source
이 문제에 관하여([c++] 타입 캐스팅 방식(형변환)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyunjae88/typecasting저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)