방프리
17.10.23. Effective C++ 5. 구현 (항목27) 본문
항목 27 : 캐스팅은 절약, 또 절약! 잊지 말자
- 필자는 캐스팅 스타일에 따라 다음과 같이 분류했습니다.
(1) (DataType)expression // 표현식 부분을 DataType으로 캐스팅 합니다.
(2) DataType(expression) // 표현식 부분을 DataType으로 캐스팅 합니다.
(1)의 경우 C 문법 스타일의 캐스팅 방법이고, (2)의 경우 함수호출문과 비슷한 캐스팅 방법입니다.
두 방법은 서로 작성방식이 다르지만 결과값은 같습니다.
이 두가지 방식을 통틀어서 '구형 스타일의 캐스트'라고 합니다.
C++의 경우엔 새로운 4가지의 캐스트 연산자를 독자적으로 제공합니다.
const_cast : 객체 상수성을 없애는 용도로 사용됩니다.
dynamic_cast : 안전한 다운캐스팅을 할 때 사용하는 연산자입니다.
즉, 주어진 객체가 어떤 클래스 상속 계통에 속한 특정 타입인지 아닌지를 결정하는 작업에 쓰입니다.
구형 스타일의 캐스트 문법으로는 흉내조차도 낼 수 없는 유일한 캐스트이기도 합니다.
덤으로, 신경 쓰일 정도로 런타임 비용이 높은 캐스트 연산자 입니다.
reinterpret_cast : 하부 수준 캐스팅을 위해 만들어진 연산자로, 적용 결과는 구현환경에 의존적입니다.
하부 수준 코드 외에는 거의 없어야 하는 캐스트입니다.
static_cast : 암시적 변환을 강제로 진행할 때 사용합니다.
흔히들 이루어지는 타입 변환을 거꾸로 수행하는 용도로 쓰입니다.
'C++ > Effective C++' 카테고리의 다른 글
17.11.30. Effective C++ 5. 구현 (항목29) (0) | 2020.01.15 |
---|---|
17.10.23. Effective C++ 5. 구현 (항목28) (0) | 2020.01.15 |
17.10.23. Effective C++ 5. 구현 (항목26) (0) | 2020.01.14 |
17.10.23. Effective C++ 4. 설계 및 선언 (항목25) (0) | 2020.01.14 |
17.08.22. Effective C++ 1. C++에 왔으면 C++의 법을 따릅시다. (항목24) (0) | 2020.01.14 |
Comments