보기도 쉽지 않고, 한번도 사용 안해봤던 C++의 여러 캐스트 연산자들. 언제나 C 스타일의 캐스트 연산자만 써왔는데, 당장
알아야 하는 것은 아니지만, 내친김에 한번 훌터보고 가는 것이 좋을거 같다. 기왕 사용하는 거, 좀 제대로 알고 사용하는 것이
좋지 않겠나..으흐..그놈의 면접 질문 파장, 정말 오래도 간다..
캐스트(cast)란 명시적 변환(explicit conversion)을 의미한다. C++의 캐스트 연산자는 4가지인데, 이들은 C++의 타입 체킹 기능을 약화 혹은 마비시키기 때문에, 조심해서 사용해야 할 것이다.
캐스트를 이용하는 경우
참고 자료: C++ Primer(Stan Lippman저, Addison Wesley), C++ Primer Plus(Stephen Prata저, Sams)
캐스트(cast)란 명시적 변환(explicit conversion)을 의미한다. C++의 캐스트 연산자는 4가지인데, 이들은 C++의 타입 체킹 기능을 약화 혹은 마비시키기 때문에, 조심해서 사용해야 할 것이다.
캐스트를 이용하는 경우
- void* 포인터 형태의 인스턴스에 명시적으로 타입을 지정해야 할 때.
- 일반적 표준 변환의 동작을 오버라이드해야 할 경우.
double dval;
int ival;
ival += dval; //여기서 ival은 double로 승격되었다가, 덧셈이후, 대입 과정에서 int로 격하된다.
-> ival += static_cast< int > ( dval ); //승격 과정이 없어진다.
- 한번 이상의 변환이 일어나는 경우의 상황에서 모호성을 없애기 위해서..
(나도 몬소린지 모르겠다..별로 안중요한거 같아..넘어간다..으흐..)
- static_cast : 컴파일러가 명시적으로 수행하는 모든 타입 변환에 사용. 타입 격하시, 컴파일러로 하여금 격하(demotion)하고 있다는 것을 분명히 알려, 경고 메시지가 안뜨도록 만든다. (잠재적 위험을 갖는 변환 : 산술 값을 enum 타입으로 캐스트할 경우, 기반 클래스를 파생 클래스로 캐스트할 경우->dynamic_cast 사용)
- const_cast : 캐스트 할 표현식에 담긴 const 속성이나 volatile 속성을 없앨 때 사용. 이 연산자를 일반 변환에 사용하면 컴파일 오류가 발생하고, 그 반대도 마찬가지이다.
- reinterpret_cast : 자신의 피연산자에 대한 비트 패턴에 대해 하위 수준(low-level)의 재해석을 실시. 위험 수준 최고의 캐스트
complex *pcom;char *pc = reinterpret_cast( char* > (pcom);
//이 경우, pc는 char*으로 온전하게 변환되지만, 꽤나 조심해야되는 것이,
string str( pc );
//처럼 나중에 사용될 경우, 컴파일 타임 오류 발생없이 그대로 실행되고,
//그 실행 결과는 어떻게 될지 장담할 수가 없게 된다. 사용 조심~!
- dynamic_cast : RTTI에 대한 정리 참고
참고 자료: C++ Primer(Stan Lippman저, Addison Wesley), C++ Primer Plus(Stephen Prata저, Sams)
반응형
'as 소프트웨어엔지니어 > C++ and Beyond' 카테고리의 다른 글
C++/CLI: .NET 프레임워크 프로그래밍을 위한 가장 강력한 언어(1/2) (2) | 2004.11.07 |
---|---|
C++에서의 몇 가지 의문 사항에 대한 정리 (3) RTTI (0) | 2004.11.02 |
C++에서의 몇 가지 의문 사항에 대한 정리 (1) virtual 키워드 (0) | 2004.10.31 |
STL(Standard Template Library) 기본 서적.. (0) | 2004.10.28 |
고 정밀도(high-resolution)로 코드 실행 시간 재기 (0) | 2004.10.21 |
댓글을 달아 주세요