decay rule

그냥 auto는 복사 타입, &를 붙이면 원본 성질을 유지한다

auto만 쓰면 참조와 top-level const가 사라지고 배열은 포인터로 붕괴합니다. 유지하려면 선언 형태에 의도를 적어야 합니다.

auto a = c_val;
const 값에서 복사본을 만듭니다.
int
auto r = ref_val;
참조가 가리키는 값을 복사합니다.
int
auto p = arr;
배열 이름은 첫 원소 포인터로 decay 됩니다.
int*
auto& r = c_val;
원본을 참조하므로 const도 유지됩니다.
const int&
const auto& v = expr;
복사를 피하고 읽기 전용 참조로 받습니다.
const T&
판단 기준: 복사해도 되는 값이면 auto, 원본을 읽거나 수정해야 하면 auto& 또는 const auto&를 씁니다.