auto
C++11부터 선언 초기화 식에서 추론되는 형식으로 변수를 선언하는 역할을 한다. C++11 이전까지는 스택에 할당되는 지역 변수를 선언하는 키워드였다. 따라서 C++ 버전에 따라 달리 동작할 수 있으니 주의해야 한다.
복잡한 변수 선언을 간소하게 하고, 이름이 긴 자료형이나 헷갈릴 수 있는 자료형을 선언할 때 실수를 줄일 수 있다는 장점이 있다.
예를 들어 아래와 같은 코드가 있다고 가정하자.
#include <iostream>
using namespace std;
class ClassNameThatIsUnnecessarilyLong {
...
}
int main() {
ClassNameThatIsUnnecessarilyLong temp;
ClassNameThatIsUnnecessarilyLong* ptemp = &temp;
...
}
이름이 쓸데없이 길다면 오타가 생길 수 있고, 가독성도 나쁘므로 이를 auto
를 이용하여 다음과 같이 바꿀 수 있다.
#include <iostream>
using namespace std;
class ClassNameThatIsUnnecessarilyLong {
...
}
int main() {
ClassNameThatIsUnnecessarilyLong temp;
auto* ptemp = &temp;
...
}
혹은 아래와 같이 기본적인 자료형에도 활용할 수 있다.
auto pi = 3.14;
auto n = 10;
3.14는 실수형이므로 pi
는 double
형으로, 10은 정수형이므로 n
은 int
형으로 선언된다.
함수의 리턴 타입으로도 사용할 수 있다. 예를 들어 아래와 같은 코드가 있다고 하자.
int add(int a, int b) {
return a + b;
}
매개변수를 더하여 반환하기 때문에 int
형이라는 추론이 가능하고 따라서 아래와 같이 auto
를 사용할 수 있다.
auto add(int a, int b) {
return a + b;
}
STL 에서 iterator 변수를 간단히 선언하는데도 유용하게 사용할 수 있다. 예를 들어 아래와 같은 for 문이 있다 해보자.
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
...
}
이때 아래와 같이 auto
를 사용하여 간단히 할 수 있다.
for (auto it = v.begin(); it != v.end(); it++) {
...
}
이런 식으로 auto
를 사용하면 v
가 int
자료형이 들어가있는 벡터가 아니더라도 사용할 수 있다는 장점 역시 가진다.
단 auto
키워드는 함수 매개변수로 쓰일 수 없고, 구조체나 클래스 등의 멤버 변수로 쓰일 수 없다. 이때는 템플릿을 사용하면 된다.
'Language > C & C++' 카테고리의 다른 글
[C++] 입출력 스트림(I/O stream) 및 버퍼(buffer) (0) | 2024.12.04 |
---|---|
[C++] 람다(lambda) 표현식 (0) | 2024.11.15 |
[C++] 표준 템플릿 라이브러리(STL) (0) | 2024.11.14 |
[C++] 템플릿(template)을 통한 일반화(generic) (0) | 2024.11.13 |
[C++] virtual 키워드를 활용한 함수 오버라이딩 및 추상 클래스 (0) | 2024.11.13 |