int num1 = 3;
long num2 = num1; // 암시적 캐스팅
프로그래머가 직접 형변환
기존 C 캐스팅이 너무 많은 일을 한다. 4가지로 구분하여 의도를 명확하게 한다.
// C
int num2 = (int)num1;
Cat* myCat = (Cat*)myPet;
// C++
int num2 = static_cast<int>(num1); // 값 형변환
Cat* myCat = static_cast<Cat*>(myPet); // 포인터 형변환
// C
void Foo(const Animal* ptr)
{
Animal* animal = (Animal*)ptr;
}
// C++
void Foo(const Animal* ptr)
{
Animal* animal = const_cast<Animal*>(ptr);
}
// const를 강제로 바꾸는 건 Bad Code -_-
// C
unsigned int myPetAddr = (unsigned int)myPet;
// C++
unsigned int myPetAddr = reinterpret_cast<unsigned int>(myPet)
// C
Cat* myCat = (Cat*)myPet;
// C++
Cat* myCat = dynamic_cast<Cat*>(myPet);