1. static_cast
묵시적 캐스르로 변수형을 변환해준다.
간단한 예)
int d = 65;
char ch = d; // 컴파일러가 묵시적으로 캐스팅을 해줌
char ch = static_cast<char>(d); // 명시적으로 캐스팅을 해줌
묵시적 캐스팅과의 차이점
- 클래스 포인터에 대해 묵시적 캐스트는 is-a관계가 성립하는 경우만 허용하고 static_cast는 is-a관
계 뿐만 아니라 상속 관계일때도 캐스팅을 해준다.
Truck* pTruck = new Car;
Truck* pTruck = static_cast<Truck*>(new Car);
명시적 변환이기는 하나 컴파일 타임에 타입 체크를 하는 등 대체적으로 안전한 형 변환이다.
2. reinterpret_cast
일반적으로 허용하지 않는 위험한 형변환을 할 때 사용한다.
단지 안에 있는 비트열만 보고 원하는 형으로 강제 변환을 할 때 사용한다.
포인터를 정수로 변환하는 작업을 사용할 때 많이 사용한다.
간단한 예)
int a, b;
a = reinterpret_cast<int>(&b);
간단한 예2)
class A
{
private :
char a;
char b;
}
위 클래스 변수 b에 억지로 값을 기록하고자 한다면 다음과 같이 사용하면 된다.
A a;
char* p = reinterpret_cast<char*>(&a);
*(p+1) = 5;
3. dynamic_cast
유일하게 c스타일의 형변환으로 불가능한 캐스팅.
상속관계에 있는 클래스의 형변환을 수행하며, 동시에 안전한지 검사 한다.
간단한 예)
Truck* pTruck = new Car;
Truck* pTruck = dynamic_cast<Truck*>(new Car);
4. const_cast
const 속성이나 volatile속성을 해제 할 때 사용한다.
변수를 정의할 때 volatile 키워드를 사용한다.
즉 상수로 정의한 변수를 변경하고 싶을 때 사용한다.
간단한 예)
RECT rectA;
CONST RECT rectB;
rectA = const_cast<RECT>(rectB);
'Basic Programming > C, C++' 카테고리의 다른 글
C++ - ZeroMemory와 memset의 차이 (0) | 2016.03.03 |
---|---|
C++ - volatile 과 register 키워드 (0) | 2016.03.03 |
C++ - auto_ptr의 문제점 (0) | 2016.02.26 |
C++ - Explict와 Mutable 키워드 (0) | 2016.02.24 |
C++ - 함수 오버라이딩, 가상함수, 다형성 (0) | 2016.02.24 |