const 포인터와 선택 기준

const 위치 해석

const int*, int* const, const int* const를 오른쪽에서 왼쪽으로 읽으면 수정 가능한 범위를 분명히 구분할 수 있습니다.

대상 const

가리키는 값을 못 바꿈

포인터가 다른 주소를 가리킬 수는 있지만 그 대상을 통해 값은 수정하지 못합니다.

const int* p
포인터 const

주소 자체를 못 바꿈

초기화한 뒤 다른 대상을 가리키게 할 수 없지만 대상 값은 바꿀 수 있습니다.

int* const p
둘 다 const

주소와 대상 모두 고정

포인터도 바꾸지 않고 그 경로로 대상 값도 바꾸지 않습니다.

const int* const p
참조 선택

필수 대상은 참조로 표현

널이 불가능하고 소유권이 없으며 별칭만 필요하면 참조가 더 읽기 쉽습니다.

const T&
const 약속*를 기준으로 왼쪽 const는 대상, 오른쪽 const는 포인터 변수에 가깝게 읽습니다.
없음 표현nullptr이 가능한 매개변수라면 참조보다 포인터가 의도를 잘 나타냅니다.
소유권소유를 넘기는 경우 원시 포인터보다 스마트 포인터 타입으로 계약을 드러냅니다.