더북(TheBook)

컴파일러의 축소 보호는 우리에게 값을 초기화할 때 정밀도를 잃지 않는다는 것을 확인할 수 있게 해준다. 반면 암시적 변환으로 인해 부동소숫점 수를 int로 변환하는 일반적인 초기화는 할 수 있다.

int i1 = 3.14;  // 축소하지만 컴파일된다. (위험한 부분) 
int i1n = { 3.14 };  // 축소 오류: 소수 부분이 사라지게 된다.

두 번째 줄에 있는 새로운 초기화 형태는 암시적 변환이 부동소수점 수의 소수부를 버리므로 일반적인 초기화를 막는다. 마찬가지로 음수를 부호가 없는 변수나 상수에 할당하는 동작도 기존의 초기화에서는 허용되지만 새로운 형태에서는 금지된다.

unsigned u2 = -3;  // 축소하지만 컴파일된다. (위험한 부분)
unsigned u2n = {-3};  // 축소 오류: 음수를 가질 수 없다.

이전 예제에서 우리는 초기화하는데 리터럴 값들을 사용했고 컴파일러는 특정 값이 해당 타입에서 표현할 수 있는지를 검사한다.

float f1 = { 3.14 };  // 괜찮다.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.