표준 C++에 있는 새로운 스타일의 캐스트가 예전 스타일의 캐스트 보다 강력하고 안전하다. 이에 대해서 알마나 잘 알고 있냐? 가 이번 항목의 주제 이다.


여기에 네 개의 문제를 찾아보고 해결하자.

문제 1. C 스타일 캐스트와 다른 것은 무엇인가?

문제 2. 다음 코드를 C++ 스타일 캐스트를 사용 하여 풀어 보자.


문제 3. C++ 캐스트에 대하여 스타일과 정확성을 논해보아라.

문제 4. const가 아닌 것으로부터 const_casst를 하여 const로 만드는 것이 일반적으로 왜 쓸모가 없을까? const가 아닌 것으로부터 const_cast를 하여 const로 만드는 것이 유용하게 사용될 수 있는 예를 보여라



충분히 생각하기 전까지 해설을 읽는다면, 원하는게 무엇이든, 얻을 수 없을 것이다.

1.
dynamic_cast가 런타임 중 값이 변경될수 있는지 체크하는 기능이 있어 기존 C스타일과 완전 다름

2.

3.
우선 dynamic_cast 는 형 변환하고자 하는 대상이 가상 함수가 있을 경우, 가능하다.
즉, 가상함수가 없는 형으로 dynamic_cast 하게 될 경우 오류를 발생시킨다.
이 예제에서는 A가 가상 함수를 포함하고 있기 때문에 합법적이다.

4.
const 가 아닌 객체를 const_cast 하여 const 객체로 만드는것은 애초에 const 속성을 버리고 쓰는게 좋으나, const 객체의 참조형(포인터나 레퍼런스)에 const 속성을 부여 하는것은 좀 쓸만하다.

참조형에 대한 const는 함수 매개변수 자체가 다르다. 즉 void f( const T& rhs) 와 void f( T& rhs) 는 오버로딩 되는 다른 함수라는 것이다. 그렇기 때문에, const를 참조하는 함수를 호출하고 싶을 경우 const 캐스팅 하는게 더 좋겠다.^^

 

총평
.. 왜 스콧 마이어스가 되도록 캐스팅에 대해서 말했는지, 한번 더 와 닿는다. .. 그리고 virtual 상속에 따른 상속체계가 달라진다는 것을 알았다. 나의 경우 하부구조의 기본자료형 캐스팅만 하기 때문에, 캐스팅 관련 부분을 신경끄고 있었던 터러, 이해하기가 어려웠다. .. 그 이유는 1. 여러 상속 구조에서의 캐스팅 변환은 프로그래머가 추적하기가 힘들다. 2. 참조형을 캐스팅 변환한것에 대한 캐스팅 변환(2체계 상속)은 ... 매우 추적하기 난해하다. 3. 1번과 2번이 혼합될 경우, ... 정말 난해하다.. 그러므로 나는 결론에 도달했다. "쓰지 않겠다."

PS. 왜 C++로 넘어오면서 캐스팅 키워드가 바뀌였는지 알겠다.(그나마 .. C형보다 3번을 찾을수 있을테니까.)

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기