CPP의 명시적 형변환 4개!

Ryan Ham·2024년 5월 21일
0

C++

목록 보기
8/26

Static_cast

Compile time에 안전한 type_casting이 일어나는지 체크한다. 가장 많이 사용하는 명시적 형변환이다.

예시)

int i = 42;
double d = static_cast<double>(i); // static_cast from int to double

Dynamic_cast

Upcasting과 Downcasting

Upcasting과 Downcasting에 대해서 먼저 알아보자. 부모 - 자식의 관계를 시각적으로 부모를 위에, 자식을 밑에다가 놓자. Upcasting은 자식 객체를 부모의 포인터 타입으로 바라보겠다는 소리고 Downcasting은그 반대이다. 이를 시작적으로 이해하면 Up과 Down의 방향성을 헷갈릴 일은 없을 것이다.

하지만, 한가지 의문점이 든다. 위 아래로의 이동은 이해할수 있겠는데 만약 자식1에서 upcasting 한 부모 포인터를 다시 다른 자식2 포인터로 downcasting 하면 어떻게 될까? 이는 생각만 해봐도 큰일이다. 여기서 dynamic_casting이 등장한다.

Dynamic_casting은 Static_casting과는 다르게 run-time에서 자식과 자식간의 포인터 변환을 하려고 하면, 이런 경우는 upcasting 후 downcasting에서 일어난다, 에러 대신 nullptr를 반환함으로서 형 변환이 안전하지 않다는 사실을 사용자에게 알려준다.

예시)

base_type* base_ptr = new BaseClass();
derived_type* derived_ptr;

derived_ptr = dynamic_cast<derived_type*>(base_ptr);

Const_cast

const 타입의 변수의 const를 해제하는 type_casting 방식.

예시)

const int* p = &i;
int* q = const_cast<int*>(p); // const_cast to remove constness

Interpret_cast

profile
🏦KAIST EE | 🏦SNU AI(빅데이터 핀테크 전문가 과정) | 📙CryptoHipsters 저자

0개의 댓글