본문 바로가기

PL/C & C++

[C++] 암시적 형 변환 (Implicit type conversion)

 

 

C++ 05.01 - 암시적 형 변환 (Implicit type conversion)

05.01 - 암시적 형 변환 (Implicit type conversion) 이전에 변수의 값이 일련의 비트로 저장되는 것과 변수의 자료형은 컴파일러에 비트를 의미 있는 값으로 해석하는 방법을 알려준다는 것을 배웠다. 다

boycoding.tistory.com

기본적인 형 변환에는 두 가지 유형이 있다.

  • 암시적 형 변환(implict type conversion): 즉 컴파일러가 자동으로 하나의 기본 자료형을 다른 자료형으로 변환한다. 자동 형 변환(automatic type conversion)이라고 불린다.
  • 명시적 형 변환(explict type conversion): 형 변환을 하기 위해 형 변환 연산자(type casting operator)를 사용한다.

암시적 형 변환은 한 기본 자료형이 예상되지만 다른 기본 자료형이 제공될 때마다 수행되며, 변환을 수행하는 방법을 컴파일러에 명시적으로 알려 주지 않는다. 위에서 언급한 경우들은 모두 암시적 형 변환이다.

  • 숫자 승격 (numeric promotion)

한 자료형의 값이 더 큰 유사한 자료형의 값으로 변환하는 경우 "숫자 승격(numeric promotion)"이 일어난다. 예를 들어, int는 float으로 float은 double로 승격될 수 있다.

long   l(64);    // promote the integer 64 into a long
double d(0.12f); // promote the float 0.12 into a double

숫자 승격은 항상 안전하며 데이터 손실이 발생하지 않는다.

  • 숫자 변환 (numeric conversion)
double d = 3; // convert integer 3 to a double (between different types)
short s  = 2; // convert integer 2 to a short  (from larger to smaller type)

큰 자료형의 값이 더 작은 유사한 자료형의 값으로 변환하거나 서로 다른 자료형 간에 변환하는 경우 "숫자 변환(numeric conversion)"이 일어난다. 항상 안전한 "숫자 승격"과는 다르게 숫자 변환으로 인해 데이터가 손실되거나 그러지 않을 수도 있다. 이 때문에 숫자 변환이 일어나는 모든 암시적 형 변환의 코드는 컴파일러에 경고를 보낸다. 다음과 같은 경우들을 주의해야 한다. 

'PL > C & C++' 카테고리의 다른 글

[C++] extern, static  (0) 2023.04.06
[C++] thread, async 차이점  (0) 2023.04.06
[C++] 전처리문  (0) 2023.04.06
[C++] lambda 표현식  (0) 2023.03.16
[C&C++] undefined reference to~ /cpp 파일에서 c 파일 불러오기  (0) 2022.06.22