유형 추론에 사용되는 C++의 auto 키워드
-
C++의
auto
키워드 -
C++에서 함수와 함께
auto
사용 -
C++에서 변수와 함께
auto
사용 -
C++에서 반복자와 함께
auto
사용 -
C++에서 함수 매개변수와 함께
auto
사용 -
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
키워드는 프로그램의 더 집중적이고 복잡한 부분에 초점을 맞춰 기본 코드를 작성하는 데 드는 많은 시간을 절약해 줍니다. 매우 유용하지만 사용 방법에 주의해야 합니다.