[C/C++] 캐스팅연산자
2022. 4. 8. 23:44ㆍProgramming language/C, C++
- 목차
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다.
서론
코딩을 하다가 실수형 변수를 정수형으로 변환하기 위하여 (int)라는 것을 한 적이 있나요? 이와 같은걸 캐스팅, 한국말로는 형 변환이라고 합니다. 사실 (int)와 같은 일반적인 명시적 형 변환은 좀 위험합니다. 강제로 형태를 변환시키니…
하지만 캐스팅이 필요한 경우가 확실히 있습니다. C++에서는 캐스팅을 조금이라도 더 안전하게 하려고 몇 가지 등장한 캐스팅 연산자들이 있습니다. 이번 글에서는 캐스팅 연산자들에 관하여 특징만 간단히 다뤄보려 합니다.
살펴볼 캐스팅 연사자들은 다음과 같습니다.
- static_cast<>
- dynamic_cast<>
- const_cast<>
- reinterpret_cast<>
캐스팅 연산자들은 <...>의 타입으로 캐스팅을 해줍니다. ex) static_cast<int> : int 형태로 캐스팅
static_cast<>
- 기본 데이터 타입 간의 캐스팅에 주로 이용
- 형 변환에 대한 타입 체크를 컴파일 타임에 정적으로 수행
- 상속관계에 있는 클래스 간의 계층 변화
- 런타임 검사 이용 X
- RTTI 꺼져있어도 됨
- 다중 상속에서는 기본 클래스 간의 타입 변화 불가
- 서로 다른 타입의 포인터 간 변화 불가능
dynamic_cast<>
- 상속관계의 클래스 간에 포인터나 참조자의 타입을 다운 캐스팅하거나 기본 클래스 간의 안전한 캐스팅에 이용
- 캐스팅 대상이 하나 이상의 가상 함수를 가지고 있어야 함
- 캐스팅하는 대상은 반드시 클래스의 포인터 형이거나 참 조형이어야 함
- 런타임 때 타입 검사를 해야 함. RTTI 옵션이 켜져 있어야 함
- 캐스팅 성공 여부를 리턴해줌 => 안전한 캐스팅
const_cast<>
- 포인터나 참조자의 상수 성을 제거
- 상수성 제거용으로만 사용될 수 있음
reinterpret_cast<>
- 강제형 변환
- 상관관계, 상속관계에 없이 서로 간의 타입 캐스팅을 시킴
- 상수성 제거는 할 수 없음
- 사실상 C타입 캐스팅 다음으로 위험한 캐스팅 연산자
반응형
LIST
'Programming language > C, C++' 카테고리의 다른 글
[C/C++]포인터 (0) | 2022.04.09 |
---|---|
[C/C++]C++의 키워드 몇 가지 (0) | 2022.04.09 |
[C/C++]STL 컨테이너 - std::map/std::set 그리고 std::deque (0) | 2022.04.08 |
[C/C++]STL 컨테이너 - std::vector 와 std::list (0) | 2022.04.08 |
[C/C++]L-Value와 R-Value (0) | 2022.04.08 |