프로그래밍/C++

C++11에서의 auto 선언

이재만박사 2020. 9. 18. 11:38

C++11은 초기화하는 값을 보고 변수형을 추론할 수 있다


초기화 선언 시 데이터형을 쓰지 않고 auto를 사용할 수 있다


auto n = 100;   // n은 int


auto x = 1.5;   // x는 double


auto y = 1.3e12L; // y는 long double


그러나 자동으로 데이터형을 추론하는 것을 그렇게 단순하게 생각해서는 안 된다


안 좋은 습관을 가질 수 있다


예를 들어 x, y, z가 모두 double 형이고 다음과 같은 코드를 작성하면


auto x = 0.0 ;   // 0.0이 double이기 때문에 문제가 없음


double y = 0;    // 0이 자동으로 0.0으로 변환되기 때문에 문제가 없음


auto z = 0;      // 이런! 0이 int이기 때문에, z가 int가 되어 문제가 생김


0.0 대신 0을 사용할 경우 문제가 발생하지는 않는다


그러나, 자동 형변환의 경우에는 문제가 발생한다


자동으로 변수형을 추론하는 것은 STL(Standard Template Library)을 사용할 때와

같이 복잡한 변수형을 다룰 때 매우 유용하다


예를 들어 C++98에서는 다음과 같이 코드가 작성된다


std::vector<double> scores;


std::vector<double>::iterator pv = scores.begin();


반면, 코드가 C++11에서는 다음과 같이 작성될 수 있다


std::vector<double> scores;


auto pv = scores.begin();