const 포인터

const 위치 해석

const int*와 int* const는 비슷해 보이지만 읽기 전용 대상과 고정된 포인터라는 전혀 다른 약속을 뜻합니다.

대상 const

가리키는 값을 못 바꿈

포인터가 다른 대상을 가리킬 수는 있지만 *p로 값 변경은 할 수 없습니다.

const int* p
포인터 const

주소 자체를 못 바꿈

처음 묶인 주소는 유지되고 그 대상 값은 타입이 허용하면 바꿀 수 있습니다.

int* const p
둘 다 const

주소와 대상 모두 고정

다른 곳을 가리킬 수도 없고 가리키는 값을 바꿀 수도 없습니다.

const int* const
매개변수

수정 의도 표현

함수에서 읽기만 하는 포인터 매개변수는 대상 const를 붙여 계약을 드러냅니다.

const T*
참조와 비교항상 존재하고 바꾸지 않을 입력은 const T&로 복사 비용 없이 계약을 드러냅니다.
API 신호const 위치는 호출자에게 함수가 데이터를 바꾸는지, 포인터를 보관하는지 단서를 줍니다.
형 변환 손실const를 제거하는 캐스트는 원래 객체가 const일 때 정의되지 않은 동작으로 이어질 수 있습니다.