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 함수 이외의 함수로 처리하려고 하면 에러가 발생한다.
예시는 이전 포스트 참고.
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기