형변환 5

C++ 이야기 - [5] 캐스트 연산자 정리

글의 순서가 조금 이상한가? 각 캐스트 연산자를 소개하는 글이 먼저 올라가고 각 캐스트 연산자를 세부 설명하는 글이 뒤따라 하는 게 일반적인 순서일지도 모르겠다. 그다지 큰 계획을 세우고 쓰는 게 아니다 보니 순서가 조금 이상해도 이해해주기 바란다. 이미 C++ 캐스트 연산자에 대해서 좋은 글들이 많이 나와 있지만 사용하는 사람을 쉽게 볼 수는 없었기에 조금 더 쉽게 하나씩 접근하여 글을 적어보면 도움이 될까 싶어 글을 적어본 것인데 전달이 잘 되었나 모르겠다. 잠시 C 스타일의 캐스트 연산자를 보자. (타입) 표현식 [예제 1] const char* pConstCharPtr = "test"; int* pIntPtr1 = NULL; int* pIntPtr2 = NULL; int* pIntPtr3 = NU..

Dev 2007.10.22

C++ 이야기 - [4] 캐스트 연산자 reinterpret_cast

C++의 4가지 캐스트 연산자에 대한 이야기 중 네 번째다. 이번은 그중에서 reinterpret_cast 에 대해서 이야기한다. 자...이제 C++ 캐스트 연산자의 복병이 등장한다. 이전에 static_cast 이야기를 하면서 살짝 사기를 쳤다. C 스타일의 캐스팅과 가장 비슷한 기능을 하는 무적의 캐스팅은 그 이름도 복잡한 reinterpret_cast 다. 이 캐스트 연산자는 C 스타일의 캐스팅만큼은 아니지만 별반 차이 없이 무배뽀다. 캐스팅 대상을 캐스팅 타겟 타입으로 비트단위로 다시 재해석한다고 보면 된다. 다른 캐스트 연산자가 처리하지 못하고 남은 뒤치다꺼리를 모두 한다. 다만 const_cast 의 역할인 상수성을 날린다거나 하는 등의 기능은 수행하지 못한다. - reinterpret_cas..

Dev 2007.10.20

C++ 이야기 - [3] 캐스트 연산자 static_cast

C++의 4가지 캐스트 연산자에 대한 이야기 중 세 번째다. 이번은 그중에서 static_cast 에 대해서 이야기한다. static_cast 는 기본적으로 C 스타일의 캐스팅과 가장 비슷한 기능을 한다. 물론 C 스타일의 캐스팅처럼 만능은 아니다. 4가지의 캐스트 연산자로 분리된 만큼 const_cast의 역할인 상수성을 날린다거나 하는 등의 다른 캐스트 연산자의 고유 기능은 수행하지 못한다. 다른 캐스트 연산자와 같이 static_cast 도 static_cast 만의 용도가 있다. - static_cast 사용 static_cast 를 사용하기 전에 용도와 제약 사항을 확인하자. 실수형과 정수형, 정수형과 열거형등의 기본 데이터 타입 간의 변환상속관계의 클래스 계층 간의 변환런타임 타입 검사를 하지..

Dev 2007.10.14

C++ 이야기 - [2] 캐스트 연산자 dynamic_cast

C++의 4가지 캐스트 연산자에 대한 이야기 중 두 번째다. 이번은 그중에서 dynamic_cast 에 대해서 이야기한다. dynamic_cast 는 상속 관계 안에서 포인터나 참조자의 타입을 기본 클래스에서 파생 클래스로의 다운 캐스팅과 다중 상속에서 기본 클래스 간의 안전한 타입 캐스팅에 사용된다. 안전한 타입 캐스팅이란 런타임에 타입 검사를 한다는 것이며 아래에 조금 더 자세하게 나온다. const_cast와 같이 다른 용도로는 사용하지 못하며 용도가 명확하다. 참고로 dynamic_cast 를 사용하려면 기본적으로 다형성은 이해를 하고 있어야 하며 RTTI도 이해하고 있다면 이 글을 볼 필요가 없을 것이다. 객체가 위치한 메모리의 시작부분을 찾는 데도 사용된다는데 사용해 본 적이 없다. 객체를 v..

Dev 2007.10.09

C++ 이야기 - [1] 캐스트 연산자 const_cast

C++의 4가지 캐스트 연산자에 대한 이야기다. 이번은 그중에서 const_cast 에 대해서 이야기한다. 나머지도 각각 한 번에 하나씩 적어보도록 하겠다. const_cast 는 포인터 또는 참조형의 상수성(const)을 제거하는 데 사용된다. 다른 용도로는 사용하지 못하며 다른 캐스트 연산자는 상수성을 제거할 수 없다. 이렇게 정해진 용도가 명확한 것이 C++ 캐스트 연산자의 특징 중 하나다. 용도가 명확한 만큼 별도의 주석 없이 코드만으로 작성자의 의도가 쉽게 파악된다. volatile 한정자를 제거하는 데도 사용된다고 하는데 사용해본 적이 없다. 특정 스레드나 루프에서 휘발성을 제거하여 컴파일러에게 최적화를 해도 된다고 알려주는 정도로 사용할 듯싶다. - const_cast 사용 [예제 1] co..

Dev 2007.10.04
반응형