Game Develop

[C++] const 관련 정리. 본문

C++/C++

[C++] const 관련 정리.

MaxLevel 2022. 1. 5. 20:41

 

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키워드가 *뒤에 선언될 경우 스택영역에 있는 포인터변수에 락이걸려 값의 변경이 불가능해진다고 보면 될것같다