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 |