티스토리 뷰
Casting의 종류는 크게 2가지로 나눌수 있다.
- implicit cast (compiler가 자동으로 type을 변경)
- explicit cast (programer가 type 변경)
* implicit cast(묵시적 변환)
- numeric promotion
type casting시 더 높은 자료형의 값으로 변경
ex) double dValue = 1.3f ; (float -> double)
- numeric conversion
서로 다른 type의 변환 (type이 달라 해당 data의 값이 손실이 될 수 있음)
ex) int nValue = 3.4; (3.4 -> 3으로 변경 / data 손실 발생)
char ch = 355; (char data value range : -128 ~ 127 / 355값이 들어와 overflow 발생)
* explict cast(명시적 변환)
- C-Style casting
기본적으로 자주 사용하는 casting 기법이다.
complie time에 type check를 하지 않기 때문에 사용하는것을 권장하지 않는다.
ex) char ch = 'a';
int nCh = (int)(ch);
- static_cast
static_cast <type-id> ( expression )
static_cast type casting 기법은 complie time에 type check를 진행하기 때문에 C-Style casting 기법보단 안전한 casting 기법이다. C-Style casting 보단 static_cast 문법을 사용하는 것을 권장한다.
ex) char ch = 'a';
int nCh = static_cast<int>(ch);
- const_cast
const_cast<new_type>(expression)
const type을 제거하여 해당 variable을 변경할수 있는 type casting 기법이다.
const만 제거 가능하고 type은 변경 할 수 없다.
ex) const char* str = "abc";
char* tmpStr = const_cast<char *>(str); //const만 제거 가능하고 type(char)은 변경 불가능
tmpStr[0] = 'd'; //print시 "dbc"로 변경됨
// str[0] = 'e';로 변경시 error 발생 -> str은 const char* type 이다.
- dynamic_cast
dynamic_cast<new_type>(expression)
상속관계의 class type casting시에 사용되는 기법이다. (down casting)
dynamic_cast는 Run Time에 type casting을 진행한다.
dynamic_cast를 사용하기 위해서는 부모 class에서 virtual function을 사용해야 한다.