늦은 변환
lossdouble avg = total / count;
`total`과 `count`가 int이면 먼저 정수 나눗셈을 수행하고, 그 결과만 double로 바뀐다.
정수 나눗셈을 끝낸 뒤 double에 담으면 이미 소수점은 사라진다. 필요한 피연산자를 먼저 넓힌 뒤 연산하도록 식을 배치한다.
double avg = total / count;
`total`과 `count`가 int이면 먼저 정수 나눗셈을 수행하고, 그 결과만 double로 바뀐다.
double avg = static_cast<double>(total) / count;
한쪽 피연산자를 double로 바꾸면 나머지도 승격되어 실수 나눗셈이 수행된다.
연산에 들어가는 값들의 현재 타입을 먼저 본다.
같은 숫자 계열이면 더 넓은 표현으로 맞춘다.
소수점 절삭, 부호 변화, 범위 축소를 확인한다.
필요한 변환은 static_cast로 식 안에 드러낸다.
`int x{3.14};`처럼 축소 변환을 컴파일 오류로 막는다.
`int`에서 `double`처럼 넓어지는 변환은 자연스럽다.
정확한 결과나 의도적인 절삭은 코드에 직접 표시한다.