2004년 5월 4일 화요일

[펌]C++ type casting

up cast : derived class -> base class로 cast
down cast : base class -> derived class로 cast

C++은 C-style-cast의 문제점을 보완하기 위해 다음과 같은 4가지 cast를
지원합니다.

static_cast<>()
dynamic_cast<>()
const_cast<>()
reinterpret_cast<>()

<> 안에 타입이 들어가고 캐스팅 하려는 타입은 반드시 뒤에 괄호로 묶어주어야
합니다.

============================================================================
===========
static_cast 는 컴파일 타임에 casting 타입을 알 수 있는 타입들을 casting 할
때 사용합니다.
dynamic_cast 는 hierarchy 가 있는 class 들 사이를 오갈 때(up, down casting
모두) 사용합니다.
const_cast 는 타입의 const 성을 없앨 때 사용합니다.
reinterpret_cast 는 별 관계 없는 타입들 간에 casting을 해야 할 때 타입만
바꿔주는데 사용합니다.
============================================================================
static_cast : upcast만 가능
dynamic_cast : upcast가능, downcast는 runtime에 RTTI정보를 가고 가능여부를 check.
reinterprete_cast : 무조건 type을 바꿔줌
const_cast : const 속성을 제거해 줌
C-style-cast : reinterpret_cast와 const_cast의 능력을 모두 가진 가장 무식한 cast

dynamic_cast 는 반드시 vtable(virtual function table)이 존재해야 합니다.
dynamic_cast 는 vtable을 차례로 뒤지기 때문에 실행시간이 O(N) 입니다.

static_cast 는 hierarchy가 존재하는 class 들 간에도 upcasting은 가능합니다.
(컴파일 타임에 알 수 있으므로 당연합니다.) 이를 언급하는 것은 hierarchy가
존재할 때 무조건
dynamic_cast를 사용하는 우를 범하지 않기 위함입니다. downcasting은 당연히
dynamic_cast를
사용해야 합니다.

댓글 없음:

댓글 쓰기