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라고 기술하기 대문에 , 캐스트 하는 부분이 눈에 듸어 찾기 편리합니다...개뿔...
'컴퓨터 과학 & 영상처리 관련 > C / C++' 카테고리의 다른 글
int min = (int)10e10, (int)-10e10 이게 크기가 얼마나 되냐? (0) | 2012.07.17 |
---|---|
cpp 예약어들(keywords)(c++11 포함) (0) | 2012.07.16 |
템플릿 , 연산자 오버로딩 등 (0) | 2012.07.10 |
소멸자를 가상 함수로(상속할 가능성이 있는 클래스의 소멸자를) (0) | 2012.07.10 |
오브젝트의 배열을 초기화 (0) | 2012.07.10 |