[C++] const 관련 정리.
Example 1. const키워드가 *앞에 선언될 경우
-> Heap에 락걸려있다는 느낌
int num1 = 4;
int num2 = 61;
const int* pNum = nullptr;
pNum = &num1; // 정상적으로 수행
*pNum = 10; // Error
const키워드가 *앞에 선언될 경우, 참조하는 값이 상수화된다.
그렇기때문에 pNum이라는 포인터변수의 값이 변경되는거는 상관없지만, 포인터가 가리키고있는 값의 변경에는
에러가 뜬다.
Example 2. const키워드가 * 뒤에 선언될 경우
-> Stack에 락걸려있다는 느낌.
int num1 = 4;
int num2 = 61;
int* const pNum = nullptr;
pNum = &num1; // Error
*pNum = 20; // 정상적으로 수행.
const키워드가 *뒤에 선언될 경우 pNun이라는 변수자체가 상수화된다.
그렇기 때문에 pNum값의 변화에는 에러가 뜨지만 pNum이라는 포인터변수가 가리키는값은 변경이 가능하다.
간단하게 정리하면 전자같이 const키워드가 *앞에 선언될 경우, 포인터가 가리키는 힙메모리의 영역이 락이걸려 값의 변경이 불가능해지고, 후자처럼 const키워드가 *뒤에 선언될 경우 스택영역에 있는 포인터변수에 락이걸려 값의 변경이 불가능해진다고 보면 될것같다