static, const, reinterpret 캐스트 연산

케스트 연산란  

 

개발자가 casting의 목적을 명확하게 명시함으로써 개발자의 의도를 컴파일러가 알게하고, 그 결과 컴파일러는 개발자의 의도와 다른 casting의 실수를 개발자에게 알려준다.

 

* static_cast

 

 - 상속 관계에 있는 포인터 간

 암시적인 변환을 비롯하여, 산술형(char, int, double 등) 및 열거형(enum)사이의 변환

 부모와 자식 클래스의 관계가 관련된 변환, void형으로의 변환

다만, 부모와 자식 변환은 동적 자료형(dynamic type)이 아닌 정적 자료형(static type)

 - 대체적으로 안전한 형변환

int number = 22;

char ch = number; //.컴파일러가 묵시적으로 캐스팅을 함

char ch2 = static_cast<char>(number); //.묵시적으로 형변환을 해줌

 

*. const_cast

 - const로 선언된 변수의 상수성을 없애고자 할 때

포인터 타입과 참조형에 대해서만 사용

 

C++ 형 체계를 무너뜨릴 수 있으므로 신중히 사용

std::string name = "콘스트";

char* name2 = const_cast<char *>(name_c.str());

 

*. reinterpret_cast

 - 일반적으로 허용하지 않는 위험한 형변환을 할때 사용

 - 기본 타입 변환을 제외한 모든 변환이 가능

 -  포인터를 정수로 변환하는 작업을 사용할 때

 

 * 이것은 대부분 구현체가 정의하도록 맡겨져 있어서 이식성을 떨어뜨리며, 요구된 변환이 올바른 변환인지의 여부를 컴파일러가 검사하지 않으므로 신중히 사용

 

int     age   = 22;;

int    *page = &age;

char *name = reinterpret_cast<char *>(page);

 


트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://fishk.egloos.com/tb/428657 [도움말]

덧글

댓글 입력 영역