conversion point

형 변환은 연산 전에 일어나야 결과 타입을 바꾼다

정수 나눗셈을 끝낸 뒤 double에 담으면 이미 소수점은 사라진다. 필요한 피연산자를 먼저 넓힌 뒤 연산하도록 식을 배치한다.

늦은 변환

loss
double avg = total / count;

`total`과 `count`가 int이면 먼저 정수 나눗셈을 수행하고, 그 결과만 double로 바뀐다.

먼저 넓히기

safe
double avg = static_cast<double>(total) / count;

한쪽 피연산자를 double로 바꾸면 나머지도 승격되어 실수 나눗셈이 수행된다.

1

피연산자 확인

연산에 들어가는 값들의 현재 타입을 먼저 본다.

2

연산 규칙 적용

같은 숫자 계열이면 더 넓은 표현으로 맞춘다.

3

손실 여부 판단

소수점 절삭, 부호 변화, 범위 축소를 확인한다.

4

의도 표시

필요한 변환은 static_cast로 식 안에 드러낸다.

선택해야 할 도구

중괄호 초기화

`int x{3.14};`처럼 축소 변환을 컴파일 오류로 막는다.

암시적 승격

`int`에서 `double`처럼 넓어지는 변환은 자연스럽다.

명시적 캐스팅

정확한 결과나 의도적인 절삭은 코드에 직접 표시한다.