관리 메뉴

有希

C++/캐스팅(Casting) 본문

프로그래밍/C++

C++/캐스팅(Casting)

有希. 2022. 1. 29. 17:33

1. static_cast

타입 원칙에 비춰볼 때 상식적인 캐스팅만 허용
int->float, 부모->자식 등..

int hp = 100;
float maxHp=200;
float ratio = static_cast<float>(hp)/maxHp;

2. dynamic_cast

상속 관계에서의 안전한 형변환
RTTI(RunTime Type Information). 다형성을 활용하는 방식 -> virtual 함수가 존재해야 한다.
vftable을 이용해서 항상 원본 클래스를 추적하고 있어서 옳지 않은 클래스로 cast를 하려고 한다면 nullptr이 반환된다.
아래 예시에서는 nullptr이 반환된다.

Creature *c = new Dog();
Dog *d = dynamic_cast<Dog*>(c);

다만, static_cast에 비해 느리므로 원본 타입을 확인할 수 있다면 static_cast를 사용하고, 불안한 상태라면 dynamic_cast를 사용


3. const_cast

const를 붙이고 때는 변환. 거의거의 안쓴다. 아래 코드는 빨간줄이 뜨지만 빌드가 잘 된다.

void Test(char* string) {}

int main()
{
	Test(const_cast<char*>("Yuki"));
}

4. reinterpret_cast

가장 만?능의 캐스팅. 아무 관계없는 다른 타입으로의 변환도 가능하다.

Dog dog;
__int64 addr = reinterpret_cast<__int64>(dog);

'프로그래밍 > C++' 카테고리의 다른 글

std::map(set) insert 정확하게 사용하기  (0) 2022.08.07
C++/STL/Vector 동작 원리  (0) 2022.01.31
C++/클래스 사이의 타입 변환  (0) 2022.01.29
C++/malloc(free) vs new(delete)  (0) 2022.01.28
C++/메모리 구조  (0) 2022.01.28