한때 기존 C 스타일 캐스팅은 (int)무엇 이런식으로 사용하기도 편하고
한눈에 들어와서 좋아보였습니다. 하지만 C의 캐스팅은 변하면 안될거까지
바꾸어버리는 위험한 캐스팅을 인지하고 C++스타일의 캐스팅을 알아보았습니다.
static_cast, 정적 캐스팅
-가장 먼저 시도해봐야 할 캐스팅
-묵시적 캐스팅과 비슷
-알고있는 보통 기본적인 캐스팅
-사용 이유는 문법적 엄격함 때문
-가상함수만 아니라면 상속 내에서도 사용가능..하긴 함.
하지만 다운캐스팅을 할땐 다이나믹 캐스트가 안전
dynamic_cast
-능동적 캐스팅
-실행중에 캐스팅이 발생
-상속내에서 사용 가능
-다형성의 특성을 지닌것에 사용
-필요로 하는 객체를 가능하다면 찾아냄, 불가능할경우 nullptr이나 bad cast를 뱉어냄
const_cast
-포인터와 참조형에만 사용됨.
-const를 붙이거나 뗄 수 있다
-const를 제거할 수 있는 유일한 캐스팅
-사용처 : const를 기반으로 한 맴버를 오버로딩할때, 혹은 오버로딩 한 맴버에 const를 씌워줄때
reinterpret_cast
-위험한 캐스팅, 최소한의 사용 요망
-연관성 없는 포인터타입을 변환하기 위해 사용
-대신 float에서 int로 변환등, 데이터 손실이 일어난 캐스팅을 제외한
변형이 일어났던걸 reinterpret cast를 던지면 원래의 모습으로 돌려줄걸 보장
- 주 사용처 : 가공되지 않은 데이터들을 실질적 사용가능한 데이터로 변환,
혹은 기계어수준의 이진법들을 정렬된 포인터로 사용하기 위해.
일단 알아보긴 했는데, 필요에 따라선 C의 강력한 캐스팅을 사용할거같기도 합니다
'정보들 > C,C++ 관련' 카테고리의 다른 글
enum VS enum class (0) | 2020.06.23 |
---|---|
inline 함수 vs 매크로 함수 (0) | 2020.06.23 |
bool vs BOOL? (0) | 2020.06.23 |
push_back vs emplace_back (0) | 2020.06.23 |
C++ STL 종류들 및 사용처 (0) | 2020.06.23 |