type casting 연습하는 과제
ex00
- 형변환 클래스 만드는 과제
- 먼저 입력 받은 값의 타입을 찾고, 입력값을 char, int, float, double형으로 각각 캐스팅한 값을 출력한다.
char literals
- ex) ’c’, ’a’, ...
- 출력가능한 범위에 있으면 해당 문자 출력
- non displayable이면 Non displayable 출력
- 애초에 char 타입 범위를 넘어서는 값이면 impossible 출력
int literals
float literals
- ex) 0.0f, -4.2f, 4.2f...
- nan은 nanf로
- inf는 inff로
- -inf는 -inff로
double literals
- ex) 0.0, -4.2, 4.2...
- nan은 nan으로
- inf는 inf로
- -inf는 -inf로
c 스타일과 c++ 스타일 캐스팅의 차이
c++ 스타일의 캐스팅
static_cast<type>(variable)
- 논리적 형변환.
- 예를 들어 int형 1과 double형 1의 바이너리 값은 다를테지만 static_cast를 쓰면 1이라는 값이 유지되도록 캐스팅을 해준다.
ex01
reinterpret_cast
- reinterpret_cast는 임의의 포인터 타입끼리 변환을 허용하는 캐스트 연산자이다.
출처: https://blockdmask.tistory.com/242 [개발자 지망생:티스토리]
- reinterpret_cast 연산자는 전혀 상관이 없는 자료형으로의 형 변환에 사용이 된다.
- 이렇게 reinterpret_cast 연사자는 포인터를 대상으로 하는, 그리고 포인터와 관련이 있는 모든 유형의 형 변환을 허용한다.
- 데이터의 값이 아닌 바이너리 값 자체를 복사해줌!
uintptr_t
- 포인터에 대한 비트연산을 할 때 쓰일 수 있다고 한다.
ex02
dynamic cast
- Base class 포인터를 Derived class 포인터로 변환하는 기능
- 포인터와 포인터간, 레퍼런스와 레퍼런스간의 변환만 가능하다.
- 안전한 타입캐스팅. 단 virtual 키워드가 하나라도 존재하는 상속 관계에서만 가능하다.
c++ cast to derived class