꺄뜨르 2012. 7. 10. 18:13

c언어에서의 형변환

void *p;

int n;

p = (void*)&n;  //int*형을 void*형으로 캐스트


cpp언어에서는 이런 식으로 캐스트를 해도 에러가 나진 않지만, 가능한 한 cpp 언어에 추가된 캐스트 연산자를 사용하도록 하십시오, 이 캐스트 연산자들은 포인터형이나 참조형을 별도의 포인터형이나 참조형으로 변환합니다. 


캐스트 연산자

v라는 값이나 변수를 T형으로 변환 

동작 

const_cast<T>(v) 

const 속성을 제거하는 데 사용합니다 

dynamic_cast<T>(v) 

 기본 클래스의 포인터(또는 참조)를 파생 클래스의 포인터(또는 참조)로 변환하는데 사용합니다

static_cast<T>(v)  c언어의 캐스트와 가까운 방법을 사용할 수 있습니다. const는 제거할 수 없습니다

reinterpret_cast<T>(v)

 함수의 포인터를 다른 함수의 포인터로 변환하거나 포인터를 int 형 등으로 변환할 수 있습니다. 전혀 다른 형으로 캐스트하는 경우, 올바르지 않은 메모리 액세스를 불러일으키기 쉬우므로, 꼭 필요한 때만 사용하십시오. 


void *p;
int n;
p = static_cast<void *> (&n);   //int* to void*


이 캐스트 연산자를 사용하면 , 잘못 캐스트를 했을 경우에 컴파일 에러를 발생시켜 줍니다. 때문에 C언어에서 사용하던 방법보다도 안전하게 캐스트할 수 있습니다. 또한 _cast라고 기술하기 대문에 , 캐스트 하는 부분이 눈에 듸어 찾기 편리합니다...개뿔...