const 키워드는 결국 변수의 값이 변경되지 않음을 명시함. 즉, 상수화시킴.


하지만 const 키워드는 정말 다양한 위치에서 사용되기에 혼동이 옴.

크게 변수 선언에 사용되는 위치와 함수 선언에 사용되는 위치 2개로 나뉨.


변수 선언 시

<const> 자료형 <const> 포인터 <const> 변수명;

   (1번)               (2번)               (3번)

함수 선언 시

<const> 자료형 <const> 포인터 함수명(parameter1, parameter2 ...) <const> { }

   (4번)               (5번)                                                             (6번)

변화를 뜻하는 변수에 const 키워드를 붙이는 이유는 그 값이 더이상 바뀌지 않기에 바뀌면 안된다는 것을 명시하는 것.

(어떻게보면 방어적 프로그래밍, 또는 설계의 한 부분이다.)



(2번) 변수 선언 시, 포인터 앞에 또는 이중 포인터 앞에 오는 const




위 그림들을 보면 이제 변수 선언시 const 위치에 따른 의미가 어떤 것인지 알 수 있다.


결국은 일반적인 char, int, long, double 등등의 자료형에 붙는 const와


위의 일반적인 자료형의 포인터에 붙는 const


그리고 일반적인 자료형의 이중포인터에 붙는 const


3개로 나뉜다.


int* const b; 나

int* const* c = &b; 나


결국 묶인 부분은 (int* const) 이고 이는 b의 주소변경을 허락하지 않겠다는 의미이다. c의 주소변경은 상관없다.



하지만 

int* b;

int** const c = &b;


했을 때, const가 의미하는 곳은 int** 부분이다. 그렇기에 이중포인터 타입인 c에 대한 변경만을 허락하지 않는다.

b주소에 대한 변경을 허용한다.



결국 const 선언이 들어간 위치에 따라서 값의 변경을 허용하는 부분이 다르다.


이 부분을 잘 알아두면 나중에 const 위치에 따른 코드의 정확한 의미를 알 수 있을 것 같다.


또한 이 부분을 잘 생각하고 나중에 클래스를 설계할 때 적용하여 const를 통한 좀 더 안정적인 코딩을 하자.



출처: http://tapito.tistory.com/31

+ Recent posts