auto
- 타입 자동 추론
- 컴파일러가 변수의 초기화 값을 기반으로 변수의 타입을 결정한다.
#include <iostream>
int main() {
auto a = 10;
auto b = 3.14;
auto c = "Hello";
auto d = true;
int x = 10;
int y = 20;
const int z = 30;
auto a = x;
auto& b = y;
auto* c = &x;
const auto d = z;
return 0;
}
auto&를 사용하면 변수를 참조 형태로 가져올 수 있다.
auto*를 사용하면 포인터 타입으로 저장 가능하다.
const auto를 사용하면 변경 불가능한 값으로 지정 가능하다.
장점
- 코드를 간결하게 만들 수 있다.
- 반복자(iterator)와 같은 긴 타입을 쉽게 다룰 수 있다.
- 템플릿 프로그래밍에서 유용하다.
- 반환 타입이 복잡한 함수에서 가독성을 높일 수 있다.
주의점
- 초기화가 필수이다.
- 과도하게 사용 시 코드의 가독성이 떨어질 수 있다.
- const와 &가 포함되지 않으면 값 복사가 이루어지므로 참조자를 사용해야 복사 비용을 줄일 수 있다.
var, auto 차이점
- var는 지역 변수에서만 사용 가능하다.
- auto는 지역 변수뿐만 아니라 클래스 멤버 변수와 함수의 반환 타입으로 사용 가능하다.
Range-based for (범위 기반 for)
- 컨테이너나 배열, 범위(Range)에 대해 간결한 방법으로 반복을 수행할 수 있게 해주는 문법이다.
- 기존의 인덱스 기반 for 문이나 반복자(Iterator)를 사용하는 방법보다 훨씬 간단하고 직관적이다.
- C#의 foreach문과 비슷하다.
#include <iostream>
#include <vector>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
std::cout << *it << " ";
}
std::cout << "\n";
for (int num : numbers) {
std::cout << num << " ";
}
std::cout << "\n";
for (auto num : numbers) {
num *= 2;
}
for (auto& num : numbers) {
num *= 2;
}
return 0;
}