auto
auto는 C++에서 타입을 자동으로 추론하도록 도와주는 키워드이다. C++11부터 도입되었으며, 코드를 더 간결하게 만들고 타입을 명시하지 않아도 되는 편리함을 제공한다.
기본 사용법
auto는 변수 선언 시 초기값의 타입을 기반으로 컴파일러가 해당 변수의 타입을 추론한다.
auto x = 10; // x는 int 타입
auto y = 3.14; // y는 double 타입
auto z= "hello"; // z는 const char* 타입
주요 특징
1. 초기값이 반드시 필요함
- auto를 사용하려면 반드시 초기화가 필요하다. 초기화 없이 선언하면 컴파일 오류가 발생한다.
auto a; // 오류: 초기값이 없어서 타입을 추론할 수 없음
2. 타입 복잡성 감소
- 복잡한 타입(예: 반복자, 함수 반환 타입)을 명시하지 않아도 된다.
std::vector<int> vec = {1, 2, 3};
auto it = vec.begin(); // std::vector<int>::iterator 대신 auto 사용
3. 타입 추론 규칙
- auto는 값의 실제 타입을 기반으로 추론한다.
const int a = 42;
auto b = a; // b는 int (const는 무시됨)
4. 참조와 포인터와 함께 사용
- 참조나 포인터로 사용할 경우 &나 *를 명시해야 한다.
int x = 10;
auto& ref = x; // ref는 int& 타입
auto* ptr = &x; // ptr은 int* 타입
5. const와 volatile
- auto는 기본적으로 상수성을 제거하지만, const를 명시적으로 추가할 수 있다.
const int x = 42;
auto y = x; // y는 int
const auto z = x; // z는 const int
람다 표현식에서의 사용
람다 표현식의 매개변수나 반환 타입을 추론할 때도 auto를 사용할 수 있다.
auto lambda = [](auto x, auto y) {
return x + y;
};
std::cout << lambda(3, 4) << std::endl; // 7
std::cout << lambda(3.5, 4.2) << std::endl; // 7.7
주의점
1. 타입 혼동
- auto를 사용하면 타입이 명시되지 않아 코드의 의도를 파악하기 어려울 수 있다.
auto a = 3.14; // a가 double인지 의도를 명확히 알기 어려움
2. 복합 타입
- 복합 타입에서 예상치 못한 타입이 추론될 수 있으므로 주의해야 한다.
std::vector<int> vec = {1, 2, 3};
for (auto x : vec) {
x *= 2; // x는 복사본이므로 vec의 원소는 변경되지 않음
}
for (auto& x : vec) {
x *= 2; // x는 참조이므로 vec의 원소가 변경됨
}
결론
auto는 코드 간결성을 높이고 복잡한 타입을 다룰 때 유용하다. 그러나 명확성이 중요한 경우에는 타입을 명시적으로 사용하는 것이 더 적합할 수 있다. 초기화된 값의 타입을 이해하고, 의도적으로 사용하는 것이 중요하다.
'C++' 카테고리의 다른 글
잡다한 문법 지식들 (1) (0) | 2025.01.08 |
---|---|
vector와 array의 차이 (0) | 2025.01.07 |
getline()과 cin (0) | 2025.01.06 |
static_cast<typeName>(value) (0) | 2025.01.06 |
int는 몇 바이트인가? (0) | 2025.01.06 |