암시적 캐스팅 (Implicit Casting)
- 컴파일러가 형을 변환해 준다.
- 형변환이 허용되고 프로그래머가 명시적으로 형변환을 하지 않은 경우에 발생한다.
- 명시적으로 변환한 경우 컴파일러는 개입하지 않는다..
int num1 = 3;
long num2 = num1;
명시적 캐스팅 (Explicit Casting)
프로그래머가 형 변환을 위한 코드를 직접 작성하는 것이다.
C++에서는 다음 네 가지 캐스팅을 제공한다.
static_cast
const_cast
dynamic_cast
(C++98, modern C++)reinterpret_cast
C 스타일 캐스팅
int score = (int)someVariable;
위의 C++ 캐스팅 네 가지 중 하나의 기능을 수행한다.
그러나 명확하지 않고 실수를 컴파일러가 캐치하지 못하는 경우가 있다.
C++ 캐스팅
1. static_cast
컴파일 중에 자료형이 캐스팅 된다.
// C style
float num1 = 3.0f;
int number2 = (int)num1;
Animal* myPet = new Cat(2, "Coco");
Cat* myCat = (Cat*)myPet;
// C++ style
float num1 = 3.0f;
int number2 = static_cast<int>(num1);
Animal* myPet = new Cat(2, "Coco");
Cat* myCat = static_cast<Cat*>(myPet);
2. reinterpret_cast
// C style
Animal* myPet = new Cat(2, "Coco");
unsigned int myPetAddr = (unsigned int)myPet;
cout << address << hex << myPet;
// C++ style
Animal* myPet = new Cat(2, "Coco");
unsigned int myPetAddr = reinterpret_cast<unsigned int>(myPet);
cout << address << hex << myPet;
3. const_cast
const
속성을 추가하거나 제거할 때 사용됩니다. 주의가 필요하며 위험할 수 있습니다.
// C style
void foo(const Animal* ptr)
{
//Bad code
Animal *animal = (Animal*)ptr;
animal->setAge(5);
}
// C++ style
void foo(const Animal* ptr)
{
//Bad code
Animal *animal = const_cast<Animal*>(ptr);
animal->setAge(5);
}
4. dynamic_cast
실행 중에 casting이 되며, 주로 다운캐스팅에 사용된다.
// C style
Cat *myCat = (Cat*)myPet;
// C++ style
Cat *myCat = dynamic_cast<Cat*>(myPet);
'Language > C++' 카테고리의 다른 글
[C++] 26.Unmanaged Programming: reinterpret_cast (0) | 2024.01.30 |
---|---|
[C++] 25.Unmanaged Programming: static_cast (0) | 2024.01.30 |
[C++] 23.Unmanaged Programming: 인터페이스(Interface) (0) | 2024.01.30 |
[C++] 22.Unmanaged Programming: 추상 클래스 (0) | 2024.01.30 |
[C++] 21.Unmanaged Programming: 다중 상속 (1) | 2024.01.30 |