유형 추론에 사용되는 C++의 auto 키워드

Suraj P 2023년10월12일
  1. C++의 auto 키워드
  2. C++에서 함수와 함께 auto 사용
  3. C++에서 변수와 함께 auto 사용
  4. C++에서 반복자와 함께 auto 사용
  5. C++에서 함수 매개변수와 함께 auto 사용
  6. C++에서 auto 키워드 사용 시 실수
  7. 결론
유형 추론에 사용되는 C++의 auto 키워드

이 튜토리얼은 C++ 11에 도입된 auto 키워드를 다룰 것입니다. 우리는 사용 사례와 그것을 사용하는 동안 저지르는 일반적인 실수를 이해하기 위해 다양한 예를 살펴볼 것입니다.

C++의 auto 키워드

C++ 11 버전의 auto 키워드는 유형 추론 기능의 일부입니다. 타입 추론은 컴파일 타임에 함수나 변수의 데이터 타입을 추론하는 것을 의미합니다.

따라서 컴파일러가 컴파일 타임에 자동으로 추론할 수 있는 데이터 유형을 지정할 필요가 없습니다. return 문은 함수의 반환 데이터 유형을 추론하는 데 도움이 됩니다.

반면, 변수의 경우 초기화는 데이터 유형을 결정하는 데 도움이 됩니다.

C++에서 함수와 함께 auto 사용

#include <iostream>
using namespace std;

auto division() {
  double a = 55.0;
  double b = 6.0;
  double ans = a / b;
  return ans;
}

int main() { cout << division(); }

출력:

9.16667

여기에서 return 문은 컴파일러가 division() 함수의 반환 유형을 추론하는 데 도움이 됩니다. 함수는 이중 유형인 ans를 반환하므로 컴파일러는 auto를 double로 바꿔야 한다고 추론합니다.

C++에서 변수와 함께 auto 사용

#include <iostream>
#include <typeinfo>
using namespace std;

int main() {
  auto x = 10;
  auto y = 10.4;
  auto z = "iron man";

  cout << x << endl;
  cout << y << endl;
  cout << z << endl;
}

출력:

10
10.4
iron man

이니셜라이저라고도 하는 문의 오른쪽을 기반으로 컴파일러는 변수 유형을 유추합니다.

C++에서 반복자와 함께 auto 사용

vector, set, map과 같은 STL 컨테이너를 다룰 때 auto 키워드는 반복 작업에 많이 사용됩니다. 반복자의 긴 선언을 건너뛰어 시간 손실을 최소화할 수 있습니다.

#include <bits/stdc++.h>
using namespace std;

int main() {
  vector<int> v{22, 14, 15, 16};

  vector<int>::iterator it = v.begin();  // without auto
  auto it2 = v.begin();

  while (it2 != v.end()) {
    cout << *it2 << " ";
    it2++;
  }
  cout << endl;

  map<int, int> mp;
  mp.insert(pair<int, int>(1, 40));
  mp.insert(pair<int, int>(2, 30));
  mp.insert(pair<int, int>(3, 60));
  mp.insert(pair<int, int>(4, 20));

  map<int, int>::iterator vt = mp.begin();  // without auto
  auto vt2 = mp.begin();

  while (vt2 != mp.end()) {
    cout << vt2->first << " -> " << vt2->second << endl;
    vt2++;
  }
  cout << endl;
}

출력:

22 14 15 16
1 -> 40
2 -> 30
3 -> 60
4 -> 20

우리는 auto를 사용하는 것과 사용하지 않는 것의 차이를 관찰합니다. auto가 없으면 반복자의 유형을 명시적으로 지정해야 하며 이는 문이 상당히 길기 때문에 지루합니다.

C++에서 함수 매개변수와 함께 auto 사용

C++에서는 매번 함수 매개변수를 지정해야 하지만 auto를 사용하여 이를 단순화할 수 있습니다.

#include <bits/stdc++.h>
using namespace std;

void myfunc(auto x, auto str) { cout << x << " " << str << endl; }

int main() {
  int x = 10;
  string str = "Iron Man";
  myfunc(x, str);
}

출력:

10 Iron Man

데이터 유형의 추론은 함수 호출 중에 발생합니다. 결과적으로 변수의 일치가 발생하고 컴파일러는 모든 인수에 대한 정확한 데이터 유형을 파악합니다.

C++에서 auto 키워드 사용 시 실수

정수 대 부울 혼동

C++에서는 부울 값이 0 또는 1로 초기화된다는 것을 알고 있습니다. 이제 이것은 디버깅하는 동안 약간의 혼란을 일으킬 수 있습니다.

#include <bits/stdc++.h>
using namespace std;

int main() { auto temp = 0; }

auto 키워드를 사용한 다중 선언

시간을 절약하기 위해 변수를 한 번에 선언하지만 둘 다 유형이 다른 경우 문제가 발생할 수 있습니다.

#include <bits/stdc++.h>
using namespace std;

int main() { auto x = 10, y = 35.66; }

출력:

[Error] inconsistent deduction for 'auto': 'int' and then 'double'

컴파일러에서 위의 코드를 컴파일할 때 오류가 발생하는데 이는 컴파일러가 혼동되기 때문에 발생합니다.

결론

auto 키워드는 프로그램의 더 집중적이고 복잡한 부분에 초점을 맞춰 기본 코드를 작성하는 데 드는 많은 시간을 절약해 줍니다. 매우 유용하지만 사용 방법에 주의해야 합니다.

작가: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub