Page 20 -
P. 20

1
                          리터럴        타입
                          2.0        double
                          2.0f       float                                                                C+  + 기초
                          2.0l       long double



                        대부분은 내장된 숫자 타입들 사이의 묵시적 변환을 통해 프로그래머가 기대하는 타입으로 값을
                        설정해주기 때문에 리터럴의 타입을 명시적(일명, 강제 변환(Coercion))으로 선언할 필요는 없다.

                        그러나 리터럴의 타입에 주목해야 하는 이유는 크게 세 가지가 있다.

                        유용함: 표준 라이브러리는 복소수를 위한 타입을 제공한다. 여기서 실수부와 허수부의 타입은 사
                        용자가 매개변수화할 수 있다.

                        std::complex<float> z(1.3, 2.4), z2;


                        불행하게도 타입 자체와 기본 실수 타입 사이의 연산만 지원한다(그리고 인수들은 여기서 변환되
                                 *
                        지 않는다).  결과적으로 z는 int나 double과 곱할 수는 없고 float만 곱할 수 있다.
                        z2 = 2 * z;     // 오류: int * complex<float>이 없음
                        z2 = 2.0 * z;   // 오류: double * complex<float>이 없음
                        z2 = 2.0f * z;  // 정상: float * complex<float>이 있음


                        애매모호함: 함수를 서로 다른 인수 타입으로 오버로딩했을 때(1.5.4절 참조), 0과 같은 인수는 애매
                        모호 할 수 있지만, 0u와 같이 한정된 인수는 정확하게 일치하는 타입이 있다.

                        정확함: 정확도 문제는 long double 타입으로 작업할 경우 발생한다. 한정되지 않은 리터럴은
                        double 타입이기 때문에 long double 타입 변수로 할당하기 전에 자릿수를 잃어버릴 수 있다.

                        long double third1 = 0.3333333333333333333;     // 자릿수를 잃어버릴 것이다.
                        long double third2 = 0.3333333333333333333l;    // 정확하다.

                        이전 세 단락의 보다 자세한 내용은 A.2.1절을 살펴보기 바란다.

                        10진수가 아닌 수: 0으로 시작하는 정수는 8진수로 해석한다. 예를 들어,

                        int o1 = 042;   // int o1 = 34;
                        int o2 = 089;   // 오류! 8진수에는 8이나 9가 없다!




                        *   그러나 [18]에 설명되어 있듯이 혼합된 산술 연산은 구현 가능하다.

                                                                                                      031




         모던c++_09.indd   31                                                                     2017-12-11   오전 11:02:55
   15   16   17   18   19   20   21   22   23   24   25