포인터 변수의 const는 붙는 위치에 따라 의미가 다르다. 아래 글은 Reference에 쓰여져 있는 포스팅이 정리가 잘 되어 있어서 인용했다.
int const * p; // 1
int * const p; // 2
int const * const p; // 3
const int * p; // 4
p = (int *)0x1000; // 가
p++; // 나
*p = 100; // 다
a = *p; // 라
const는 바로 앞의 키워드에 대해 상수화가 이루어진다고 보면 된다. 단 예외적으로 4번은 앞에 아무 키워드도 없으니 뒤에 있는 키워드에 대해 상수화를 시킨다. 그래서
1 -> 값에 대한 상수화
2 -> 포인터에 대한 상수화
3 -> 값, 포인터 모두에 대한 상수화
4 -> 값에 대한 상수화
그래서 1, 2, 3, 4번이 가, 나, 다, 라 중 할 수 없는 동작을 매칭 해보면
1 -> 값을 바꾸지 못하니 '다' (나는 주소값을 바꾸고 있으니 가능)
2 -> 주소를 바꾸지 못하니 '가', '나'
3 -> 값, 주소 모두 바꾸지 못하니 '가', '나', '다'
4 -> '다'
Reference
https://preventionyun.tistory.com/23
'공부 > C || C++' 카테고리의 다른 글
C++ 11 RVO(Return Value Optimization) (0) | 2022.08.29 |
---|---|
const 멤버 함수의 리턴 타입을 레퍼런스로 할 수 없는 이유/ const 멤버함수 내부에서 const가 아닌 멤버 함수를 호출할 수 없다 (0) | 2021.11.12 |
C++ 변환 연산자(Conversion Operator) (0) | 2021.08.28 |
C++ vector의 resize vs reserve (0) | 2021.08.25 |
C++ 오버라이딩시 반환 타입을 자식 클래스 타입으로 하면 반환 타입이 다르게 오버라이딩 된다 (0) | 2021.08.21 |