C++ 스타일의 캐스트

C++ 2014. 12. 31. 14:46
728x90

사용법

C스타일의 캐스팅 방식 -> (타입) 표현식

C++  스타일의 캐스팅 방식 -> static_cast<타입>(표현식)

 

c++ 캐스팅을 써야 하는 이유

타이핑 면에서는 불편할수 있지만 c++ 캐스팅을 쓰게되면

가독성이 좋아지고

캐스팅 에러를 컴파일러가 대신 찾아 주기 때문에 사용해야 한다.

 

1. static_cast

기본적인 캐스트 연산자로써 struct를 int 타입으로 바꾸거나 double을 포인터 타입으로 바꾸는 이상한 타입 변환은 불가능하며 가능한 형변환만 하는 기본적인 캐스트

 

2. const_cast

상수성이나 휘발성(volatile)을 없애는데 사용하는 캐스트

 

* volatile : 도스 환경에는 인터럽트, 유닉에스는 데몬, 윈도우에는 서비스 등의 백그라운드 프로세스 등이 존재 하는데 어떠한 변수의 값을 프로세스나 스레드가 값을 실행중에 바꿔버릴수 잇는 경우도 존재한다.

그럴경우 변수 선언문 앞에 volatile를 붙이면 컴파일러는 이 변수에 대해 어떠한 최적화 처리(값이바뀌는 등)도 하지 않게 되고 개발자가 작성한 코드 그대로 컴파일하게된다. 

 

3. dynamic_cast

상속 계층 관계를 가로지르거나 하향시킨 클래스 타입으로 안전하게 캐스팅할 때 사용

(*상속 관계에 있지 않은 곳에는 사용할수 없다)

 

4. reinterpret_cast

함수 포인터 타입을 서로 바꿀때 사용한다.

하지만 이것은 왠만하면 사용하지 않는것이 좋다고 한다.

함수 포인터의 캐스팅은 소스의 이식성을 떨어뜨리고 이런 캐스팅은 잘못된 결과를 낳을수 있기 때문에 왠만하면 피해라고 한다. 

 

 

728x90
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침