컴퓨터/C++
[C++] C++의 형변환 const_cast, static_cast, reinterpret_cast, dynamic_cast
Luyin
2013. 2. 20. 21:18
1) const_cast
: 어떤 타입에서 const 속성이나 volatile 속성을 제거할 때 사용한다.
ex)
const int ADC_Value = 100;
int i = const_cast<int> (ADC_Value);
2) static_cast
: C언어의 묵시적 형변한과 같다.
ex)
a) C스타일
int a = 5;
double b = (double)a;
b) C++스타일
double a = 10.0;
char b = static_cast<char> (a);
3) reinterpret_cast
: 일반적으로 허용하지 않는 위험한 형변환을(강제 형변환) 할 때 사용한다. 그 안의 데이터가 어떤 객체이던 그저 비트열로만 보고 원하는 형으로 강제로 변환한다는 것이다.
ex)
포인터를 정수로 변환하는 작업.
int a;
int * b;
a = reinterpret_cast<int>(&b);
4) dynamic_cast
: 유일하게 C스타일의 형변환으로 흉내낼 수 없는 형 변환 이다. dynamic_cast는 서로 상속 관계에 있는 클래스간의 형변환을 할 때 사용한다.
형 변환에 문제가 없는지 안전검사도 하는데 문제가 있을시에는 NULL값을 리턴하거나 예외를 띄운다. 가상함수가 없는 클래스는 사용할 수 없다.
ex)
truck* ptruck = new car;
truck* ptruck = dynamic_cast<truck*>(new car);