[C++] 타입 변환 1: 값, 타입 변환 / 암시적, 명시적 변환
타입 변환 1: 값, 타입 변환 / 암시적, 명시적 변환
인프런 Rookiss님의 'Part1: C++ 프로그래밍 입문' 강의를 기반으로 정리한 필기입니다.
😎[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 강의 들으러 가기!
타입 변환 유형 (비트열 재구성 여부)
1. 값 타입 변환
- 특징) 의미를 유지하기 위해서, 원본 객체와 다른 비트열 재구성
int a = 123456789; // 2의 보수 float b = (float)a; // 부동소수점(지수 + 유효숫자) cout << b << endl;

더보기

&a(a의 주소값)을 검색하면 075bcd15가 나온다. 123456789는 16진수로 75BCD15

123456789는 16진수로 75BCD15

&b(b의 주소값) 검색. 4ceb79a3는 123456789가 아니다







2. 참조 타입 변환
- 특징) 비트열을 재구성하지 않고, '관점'만 바꾸는 것
- 거의 쓸일은 없지만, 포인터 타입 변환도 '참조 타입 변환' 동일한 룰을 따르니까 일석이조로 공부하자!
int a = 123456789; // 2의 보수 float b = (float&)a; // 부동소수점(지수 + 유효숫자) cout << b << endl; cout << "^^^^^^^^^^" << endl;
안전도 분류
1. 안전한 변환
- 특징) 의미가 항상 100% 완전히 일치하는 경우
- 같은 타입이면서 크기가 더 큰 바구니로 이동
- 작은 바구니 -> 큰 바구니로 이동 OK (업캐스팅)
- ex) char -> short, short -> int, int -> __int54
int a = 123456789; __int64 b = a; cout << b << endl; cout << "----------" << endl;
2. 불안전한 변환
- 특징) 의미가 항상 100% 일치한다고 보장하지 못하는 경우
- 타입이 다르거나
- 같은 타입이지만 큰 바구니 -> 작은 바구니 이동 (다운캐스팅)
int a = 123456789; float b = a; short c = a; cout << b << endl; cout << c << endl; cout << "**********" << endl;
프로그래머 의도에 따라 분류 - 암시적, 명시적 변환
1. 암시적 변환
- 특징) 이미 알려진 타입 변환 규칙에 따라서 컴파일러 '자동'으로 타입 변환
int a = 123456789; float b = a; // 암시적으로 cout << b << endl;
2. 명시적 변환
int a = 123456789; int* b = (int*)a; cout << b << endl;
전체 코드
더보기

#include <iostream> using namespace std; // 타입 변환 // malloc -> void*을 반환하고, 이를 우리가 (타입 변환)을 통해 사용했었음 int main() { // ----------- 타입 변환 유형 (비트열 재구성 여부) ---------------- // [1] 값 타입 변환 // 특징) 의미를 유지하기 위해서, 원본 객체와 다른 비트열 재구성 { int a = 123456789; // 2의 보수 float b = (float)a; // 부동소수점(지수 + 유효숫자) cout << b << endl; } // [2] 참조 타입 변환 // 특징) 비트열을 재구성하지 않고, '관점'만 바꾸는 것 // 거의 쓸일은 없지만, 포인터 타입 변환도 '참조 타입 변환' 동일한 룰을 따르니까 일석이조로 공부하자! { int a = 123456789; // 2의 보수 float b = (float&)a; // 부동소수점(지수 + 유효숫자) cout << b << endl; cout << "^^^^^^^^^^" << endl; } // ---------- 안전도 분류 ------------- // [1] 안전한 변환 // 특징) 의미가 항상 100% 완전히 일치하는 경우 // 같은 타입이면서 크기가 더 큰 바구니로 이동 // 작은 바구니 -> 큰 바구니로 이동 OK (업캐스팅) // ex) char -> short, short -> int, int -> __int54 { int a = 123456789; __int64 b = a; cout << b << endl; cout << "----------" << endl; } // [2] 불안전한 변환 // 특징) 의미가 항상 100% 일치한다고 보장하지 못하는 경우 // 타입이 다르거나 // 같은 타입이지만 큰 바구니 -> 작은 바구니 이동 (다운캐스팅) { int a = 123456789; float b = a; short c = a; cout << b << endl; cout << c << endl; cout << "**********" << endl; } // --------- 프로그래머 의도에 따라 분류 ----------- // [1] 암시적 변환 // 특징) 이미 알려진 타입 변환 규칙에 따라서 컴파일러 '자동'으로 타입 변환 { int a = 123456789; float b = a; // 암시적으로 cout << b << endl; } // [2] 명시적 변환 { int a = 123456789; int* b = (int*)a; cout << b << endl; } return 0; }
실행화면

'⭐ Programming > C++' 카테고리의 다른 글
[C++] 타입 변환 3: 포인터 타입 변환 (0) | 2022.04.08 |
---|---|
[C++] 타입 변환 2: 참조 타입 변환 (0) | 2022.04.08 |
[C++] 동적 할당: new, delete (0) | 2022.04.07 |
[C++] 동적 할당: malloc, free, void*, double free, Use-After-Free (0) | 2022.04.07 |
[C++] 객체지향 마무리 (0) | 2022.04.06 |
댓글
이 글 공유하기
다른 글
-
[C++] 타입 변환 3: 포인터 타입 변환
[C++] 타입 변환 3: 포인터 타입 변환
2022.04.08 -
[C++] 타입 변환 2: 참조 타입 변환
[C++] 타입 변환 2: 참조 타입 변환
2022.04.08 -
[C++] 동적 할당: new, delete
[C++] 동적 할당: new, delete
2022.04.07 -
[C++] 동적 할당: malloc, free, void*, double free, Use-After-Free
[C++] 동적 할당: malloc, free, void*, double free, Use-After-Free
2022.04.07
댓글을 사용할 수 없습니다.