2012년 3월 14일 수요일

[C++] const 지정자


아래 두 표현의 차이는 무엇일까?




1.          const int* p;




2.          int* const p; 




스크롤을 내리기 전에 함께 생각해보자 :D












------------- 정답 -------------


1번은 const int 를 가리키는 포인터.
즉, 정수 변수의 값이 변하지 않는다는 뜻이다.

int            a = 5;
const int* p = &a;
*p = 10;           //// 값을 바꾸려 하므로 에러발생




2번은 정수를 가리키는 const 포인터 p이다.
즉, p가 가진 값(주소)가 변하지 않는다는 것을 보장한다.

int            a, b;
int* const p = &a;
p = &b;               //// 저장된 주소를 바꾸려 하므로 에러 발생





아예 둘 다 변하지 않도록 이렇게 써도 된다.

const int* const p;






내 생각에 const를 붙여주는 이유는, 물론 안정성을 높여주는 코딩 습관인 것도 있지만 코드의 가독성을 높이는 것도 큰 이유인 듯 하다.
코드를 읽을때 const가 붙어있으면 아, 이 함수는 이런 일을 하겠구나 라고 이해하기가 더 쉬워지는 것 같다.





※ 클래스에서의 const

예전 포스트에서도 언급했지만,

void ClassName:: FunctionName(void) const;

이처럼 멤버 함수의 선언부 마지막에 const가 붙은 함수를 const 함수라고 하는데,
이것은 컴파일러에게 멤버 변수의 값을 바꾸지 않겠다는 보장을 한 것이다.
예를 들어 어떤 함수에서 인자로 const형 변수를 받아왔을때 내부에서 const 함수 이외의 함수로 처리하려고 하면 에러가 발생한다.
예시는 이전 포스트 참고.

댓글 없음:

댓글 쓰기