본문 바로가기
컴퓨터/C++

[C++] C++의 형변환 const_cast, static_cast, reinterpret_cast, dynamic_cast

by Luyin 2013. 2. 20.


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);