const T* pct // const T 로의 포인터
T* const cpt // T 로의 const 포인터

뭔가 말장난 같아 보이지만 둘이 서로 다른 개념이다.

전자는 T 가 const 하고 포인터는 그것을 가리키고 있지만,

후자는 포인터가 const 하게 되어 포인터가 해당 객체밖에 가리키지 못하게 된다.

포인터와 개체 중 어떤 것을 const 로 하고 싶은 것인지 결정한 뒤 둘을 명확하게 구분하여 선언해주도록 하자.

 

그렇다면 아래의 경우는 어떻게 될까?

const T* pct1
T const* pct2

위의 두가지의 경우는 둘 다 const T 로의 포인터로, 같은 내용이다.

포인터를 나타내는 * 표시 전후로 내용이 갈라지는데, const T 로의 포인터를 사용하고 싶을 땐 아래와 같은 형식을 취하도록 하자.

혼동과 오류를 더 잘 막아줄 수 있기 때문이다.

 

물론 const T 개체를 가리키는 const 포인터 선언도 아래와 같이 가능하다.

T const* const pct;

 

+

const 포인터(혹은 레퍼런스) 가 비-const 객체를 가리키는 것은 가능하다.

하지만 그 반대는 성립될 수 없다!  const 객체를 비-const 포인터가 참조하면 객체 변경 시도를 할 수 있기 때문이다.

non-const ptr = const_cast<T*>(const obj); // 좋지는 않다

이렇게 캐스팅은 가능하지만 권장하지는 않는다고 한다.

'STUDY > C++' 카테고리의 다른 글

[C++] 얼리 리턴?  (0) 2020.07.10
[C++] 배열 형식의 인수  (0) 2020.06.30
[C++] 키워드 static  (0) 2020.05.26
[C++] list 를 쓸까?  (0) 2020.05.22
[C++] 배열과 벡터?  (0) 2020.05.21

+ Recent posts