auto
- 변수의 형식을 자동으로 추론
- 컴파일러가 변수의 형식을 알아서 결정
&
- 참조자 !
- 특정 객체를 가리키며, 직접 해당 객체에 접근, 수정 가능
- 포인터와 유사하지만, 포인터처럼 메모리 주소를 저장하는 것이 아니라, 변수의 별칭 역할을 함
auto&
- 변수의 형식을 자동으로 결정 (형식 추론) + 참조
- 복사를 피하고, 원본 객체 직접 수정 가능
ex
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> vec = {1, 2, 3, 4, 5};
// auto& 사용
for (auto& element : vec) {
element *= 2; // 원본 요소를 직접 수정
}
// 결과 출력
for (const auto& element : vec) {
cout << element << " ";
}
return 0;
}
비교
for (int i : vec) {
i *= 2;
}
- 변수 i는 벡터 요소의 값을 복사
- i는 vec의 각 요소 값을 복사한 것이므로, i를 수정해도 vec의 원본 요소에는 영향을 미치지 X
- 따라서 vec의 원본 데이터는 수정 X
for (auto& element : vec) {
element *= 2;
}
- 변수 element는 벡터 요소 참조 !
- element는 vec의 각 요소를 참조하므로, element를 수정하면 vec의 원본 요소가 직접 수정됨
- 따라서 vec의 원본 데이터가 수정됨