- const_cast : 상수성을 제거하는데 사용합니다.

const int* pconstint = new int (10);

int *pint = const_cast<int*>(pconstint);

pint = 20;

위와 같이 pint는 상수성이 제거되면서 대상값을 아무 제약없이 변경할 수 있습니다. (포인터 상수만)

 

- dynamic_cast : 상속관계 안에서 포인터나 참조자의 타입을 기본클래스에서 파생클래스로 다운캐스팅과

다중상속에서 기본클래스간의 안전한 타입캐스팅에 사용합니다.

class A {...};

class B : public A { ... }

A *pBase = new A;

A *pParent = new B;

B *pP = new B;

//pParent = pBase;

pParent = dynamic_cast<B*>( pBase );

//pP = pParent;

pP = dynamic_cast<B*>( pParent );

위에서 주석처리 된 부분은 컴파일 에러가 나는 부분입니다.

위와 같이 다이나믹 캐스트는 안전하게 부모 클래스에서 파생클래스로 다운캐스팅을 해줍니다.

 

- static_cast : 가장 기본적인 캐스팅입니다.

실수, 정수, 열거형 등 우리가 기본적으로 사용하는 캐스팅이지만 C언어 형태처럼 만능으로

뭐든지 변환하지는 못하고 약간의 제약사항등이 있습니다.

(예: 서로 다른 타입의 포인터 간의 타입 변환)

 

- reinterpret_cast : 위 3가지 캐스트가 하지 못하는 잡다한 모든 캐스팅을 합니다.

단, 상수형(const) 만은 제거하지 못합니다.

클래스간에 상속관계가 성립되지 않거나 전혀 타입이 다른 어떠한 객체들,,,,,

전혀 상관이 없는 변수간의 타입변환을 수행할 수 있습니다.

 

위의 4가지 캐스팅을 모두 묶은 것이 a = (타입)b; 의 c언어 캐스팅입니다.

그만큼 사용에 제약사항이 없는 대신에 잘못사용해서 실수로 빚어지는 프로그램상의 런타임 에러는

크다는 거지요~~

 

'프로그래밍 > VC++ 개발 코딩' 카테고리의 다른 글

Make file for window  (0) 2014.01.17
Big vs Little Endian 설명  (0) 2014.01.17
Enum과 bit연산  (0) 2014.01.17
[링크스크랩] [C++] stl vector 사용법  (0) 2014.01.17
ActiveX(*.ocx)로 ocx Component 만들기  (0) 2014.01.17

+ Recent posts