C++ auto 추론

auto 타입 보존 확인

auto는 오른쪽 식에서 타입을 추론하지만 참조와 top-level const가 어떻게 사라지는지 모르면 복사와 수명 버그가 생긴다. auto, auto&, const auto&, decltype(auto)를 구분한다.

01

초기식 확인

auto는 반드시 초기식이 필요하며 그 식의 타입에서 추론한다.

선언만 불가
02

값/참조 선택

복사가 필요한지 원본을 봐야 하는지에 따라 auto와 auto&를 고른다.

비용과 의미
03

const 보존

값 auto는 top-level const를 버리지만 const auto&는 원본 수정을 막는다.

보존 수준
04

반환 추론

함수 반환에서 decltype(auto)는 참조 반환까지 보존하므로 수명 위험을 검토한다.

강력하지만 위험
auto x
복사 또는 이동된 값 원본과 독립된 값을 만들며 참조성과 top-level const가 사라진다.
큰 객체 비용
auto& x
원본 수정 가능 참조 초기식이 lvalue여야 하고 원본 수명에 묶인다.
dangling
const auto&
복사 방지 읽기 임시 수명 연장이 가능해 범용 읽기 매개에 자주 쓰인다.
수정 불가
auto&&
forwarding 또는 universal 성격 템플릿/범위 for에서 값 범주 보존에 쓰인다.
std::forward 맥락

의도 · 복사 · 수명 점검

의도 타입을 숨겨도 코드 의미가 더 선명한지, 중요한 단위 타입이 가려지지 않는지 본다.
복사 range-for에서 auto가 원소를 복사하고 있지 않은지 확인한다.
수명 auto&나 decltype(auto)가 지역 임시를 참조하지 않는지 검토한다.