비트열 재구성 여부
1.값 타입 변환
의미를 유지하기 위해 원본과 다른 비트열 구성
int a = 123456789;
float b = (float)a;
b는 정수형 a와 유사한 값의 의미를 가지지만
비트단계에서는 완전히 다른 비트열을 가지게됨
2.참조 타입 변환
비트열을 재구성하지 않고 관점만 바꾼다. (포인터 타입 변환도 동일한 룰을 따름)
int a = 123456789;
float b = (float&)a;
b는 a와 같은 비트열을 가지지만
의미에서는 전혀 다른 값을 가지게 된다.
연관 없는 클래스 사이 변환
1.값 타입 변환
일반적으로는 안되고 타입 변환 생성자나 타입 변환 연산자가 있어야 함
Knight knight;
Dog dog = (Dog)knight; // 타입 변환 생성자
Knight knight2 = dog; // 타입 변환 연산자
2.참조 타입 변환
명시적 변환하면 허용해줌 (void 포인터처럼 일단 허용)
Knight knight;
Dog& dog = (Dog&)knight;
값 타입 변환은 비트열을 바꾸고 논리적으로 말이 되게 변환한다. 말이 안되면 변환 안시켜준다.
(ex. 전혀 상관 없는 클래스, 부모 -> 자식 변환)
참조 타입 변환은 비트열은 냅두고 관점을 바꾼다. 명시적 요구하면 변환은 해주고 암시적 변환은 안전한 것만 해준다.
(ex. 자식->부모처럼 안전한 변환은 암시적으로 해줌)
'C++' 카테고리의 다른 글
| [C++] auto (0) | 2022.06.25 |
|---|---|
| [C++] algorithm 헤더의 remove, remove_if 주의점 (0) | 2022.06.24 |
| [C++] new vs malloc (0) | 2022.06.22 |
| [C++] 초기화 리스트는 선처리 영역에서 실행된다. (0) | 2022.06.22 |
| [C++] 포인터 vs 배열 (0) | 2022.06.21 |