7 분 소요

1. static_cast

// 1.
int num = 20;
int maxNum = 300;
float ratio = static_cast<float>(num) / maxNum;

// 2.  
Base* b = new Derived_A();
Derived_A* d_a = static_cast<Derived_A*>(b);
// ❗ 단점 : 안정성 보장 못함
Deribed_B* d_b = static_cast<Derived_B*>(b); 


2. dynamic_cast

class A {};
class B : public A {};
class C : public B {};
// 업 캐스트
C* c = new C();
B* b = dynamic_cast<B*>(c);
A* a = dynamic_cast<A*>(c);
class A {virtual void f();};
class B : public A {virtual void f();};
class C : public A {virtual void f();};
// 다운 캐스트
A* a = new B();
B* b = dynamic_cast<B*>(a);
C* c = dynamic_cast<C*>(a); // return nullptr


3. const_cast

void PrintName(char* name) { cout << name << endl; }

PrintName(const_cast<char*>("2in9u"));


4. reinterpret_cast

class A {};
class B {};

A* a = new A();
//
__int64 address = reinterpret_cast<__int64>(a);
//
B* b = reinterpret_cast<B*>(a);
//
void* p = malloc(1000);
B* bb = reinterpret_cast<B*>(p);


📑. 참고

카테고리:

업데이트:

댓글남기기