C++ 표준에 기록되어 있는 auto
라는 키워드는 원래 의미와 수정된 의미가 정의되어 있다. C++11전에는 auto는 자동 저장소 클래스에 있는 변수, 지역변수를 선언하는 역할을 했었다.
그러나 C++11부터 auto
라는 키워드는 선언의 초기화 식에서 형식이 추론되는 변수를 선언하는 역할을 하고 있다.
이러한 차이 때문에 C++버전에 따라 auto
라는 키워드는 다르게 동작 할 수 있다.
위와 같은경우 count를 참조하는 변수를 받았으므로 11 12가 출력된다.
D와 같이 식을 추론 할 수 없는경우나 E와 같은 여러변수를 넣어 초기화 하는 방법은 오류를 발생 시킨다.
그러나 몇가지 경우에서는 auto를 사용할 수 없다.
auto
키워드는 함수의 매개변수로 쓰일 수 없다.
auto
키워드는 해당 객체의 자료형 크기를 정할 수 없기 때문에 구조체나 클래스 등의 맴버 변수로 쓰일 수 없다.
그러나 리턴형으로는 사용 가능하다.
하지만 이런 식으로 후행 반환 형식을 지정한다는것은 일반적인 double return 형 함수와 똑같다.
그렇기 때문에 auto
는 templete와 함께 사용해야 의미가 있다.
위의 A라는 함수에서 int형과 double형이 매개변수로 들어오면 decltype에서 t1, t2를 더해서 double이 되고, auto가 자동적으로 double형태로 리턴이 된다. 즉, decltype을 이용해서 리턴 시킬 자료형을 예측 가능하도록 만들어 줄 수 있다.
이러한 방법은 매우 큰 이점을 갖게 된다.
templete를 사용하는 상황에서는 int와 double형의 매개변수 대입 순서를 알 수 없다. 하지만 더 큰 자료형을 return을 시켜주고 싶을 때, decltype을 이용해서 double형을 리턴 시킬 수 있게 만들수 있다. 이때 auto
를 이용하여 자료형을 모르는 상황에서도 적절한 자료형인 double을 리턴 할 수 있게된다.
auto
를 사용하지 않는다면 사용자는 모든 경우의 자료형을 갖는 함수를 만들어야 할 것이다.
더욱 다양한 자료형을 사용하는 경우를 고려한다면 templete
과 auto
를 같이 사용한다면 매우 깔끔하게 하나의 함수 작성만으로 끝나게 된다.
이러한 장점이 존재하는 auto
가 있어 개발이 쉽고 간편해 지지만 무분별하게 사용하는것은 자료형을 파악하기 어려워 지고 가독성이 낮아지게 된다.
그렇기 때문에 코드 컨벤션 등을 지키면서 적절한 위치에 사용을 한다면 아름다운 코드를 만들 수 있을 것이다.
https://docs.microsoft.com/ko-kr/cpp/cpp/auto-cpp?view=vs-2019 https://m.blog.naver.com/kyed203/220068115571