티스토리 뷰

개발/C++

[C/C++] Type Casting

Tei . 2020. 12. 30. 13:34

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을 사용해야 한다.

'개발 > C++' 카테고리의 다른 글

기본 파일 입출력  (0) 2016.09.13
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함