더북(TheBook)

1.2.3 축소하지 않는 초기화

long 타입의 변수를 큰 숫자로 초기화한다고 하자.

long l2 = 1234567890123;

이 코드는 잘 컴파일되며 제대로 동작한다. 대부분의 64비트 플랫폼에서 long의 크기는 64비트다. 만약 long의 크기가 32비트라면(컴파일할 때 -m32 플래그를 붙여 에뮬레이션할 수 있다), 위에 있는 값은 너무 크다. 그러나 프로그램은 (아마도 경고 메시지와 함께) 여전히 컴파일되며 다른 값이 할당된다. 예를 들어 여기서는 앞쪽 비트가 버려지게 된다.

C++11은 데이터가 손실되지 않음을, 다시 말해서 값들이 축소되지 않음(not Narrowed)을 확인하는 초기화를 도입한다. 이는 유니폼 초기화(uniform initialization)중괄호 초기화(braced initialization)를 사용하면 되는데, 여기서는 간단히 언급하며 2.3.4절에서 자세히 다룬다. 중괄호 안에 있는 값들은 축소할 수 없다.

long l = { 1234567890123 };

이제 컴파일러는 변수 l이 타겟 아키텍처에서 값을 저장할 수 있는지를 확인할 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.