Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 5G에그
- C++
- VR플랫폼
- MacFilter
- linux
- js
- 클린 아키텍처
- 게임제작
- OculusInteractionSamplesRayCanvas
- C언어
- DAIVerse
- PointableCanvasModule
- 2D
- 바이브코딩
- 스펙주도형개발
- Unity
- 동적 힙
- 파일패킹
- 게임은 문화
- PHOTON
- VR
- 메모리
- 캐스팅연산자
- 유니티
- 온라인
- TCP
- 캐시 메모리 사상
- handtracking
- 게임개발
- 게임
Archives
- Today
- Total
kunyoungparkk
[C++] 형 변환 연산 본문
C++로 개발할 때는, 형 변환시에 C스타일의 괄호 대신 형 변환 연산자를 사용하는 것이 바람직하다.
| 형 변환 연산자 | 컴파일 타임 | 런 타임 |
| dynamic_cast | 업캐스팅/다운캐스팅 허용, 클래스 타입만 | 부모 -> 자식 캐스팅의 경우, 실제로 캐스팅 가능하다면 허용 (다운캐스팅) |
| static_cast | 업캐스팅/다운캐스팅 허용, 원시 타입 / 클래스 타입 모두 가능 | x |
| reinterpret_cast (=C 스타일) | 모두 허용 | x |
| const_cast | const를 붙이거나 뗀다. | x |
가장 많이 사용하는 static_cast와 dynamic_cast의 차이점은
런타임에 다운캐스팅이 가능한지 검증을 하느냐, 마느냐다. (원시 타입 지원 여부도 다르다.)
static_cast는 잘못된 다운캐스팅이어도 컴파일이 된다.
그러나 dynamic_cast는 런타임에 실제 저장된 객체 기준으로,
부모 -> 자식 캐스팅을 허용하지 않고, 이 경우 NULL을 반환한다.
즉, 부모(기초) 클래스의 타입으로 존재하는 자식(유도) 클래스의 객체를 자식 클래스 타입으로 변형하는 것을 허용하면서,
부모클래스 객체가 자식 클래스 타입으로 캐스팅되는 것 등을 막기 위해서 dynamic_cast를 사용한다.
동작 원리는, 가상함수 테이블을 통하여 연산자 내부에서 실제 객체를 구분짓는다.
reinterpret_cast는 C에서 괄호로 묶어서 형변환한 결과와 일치한다.
const_cast는 const를 붙이거나 떼거나 할 때 사용한다.
이런 형 변환 연산자들은 각각 static_cast (8~90%), dynamic_cast(10%), reinterpret_cast / const_cast (1%) 의 빈도로 사용된다고 한다.
'C++' 카테고리의 다른 글
| [C/C++] 소켓 API (0) | 2023.04.06 |
|---|---|
| [C++] 템플릿 (0) | 2022.01.07 |
| C++ 정리 (0) | 2022.01.06 |
| 비트맵(.bmp) 파일 구조 (0) | 2022.01.06 |
| [C/C++] 파일 패킹 (0) | 2022.01.06 |