-
Const Keyword에 대한 정리카테고리 없음 2014. 2. 13. 10:20
const keywrod의 정의
변수를 상수화 하는 것
처음에 가능하면 const keyword를 많이 사용하는 것이 좋고 Pointer 대신에 Reference 를 가능한 한 많이 사용을 하라고 하였다.
여기서는 const의 문법적인 설명보다는 Error 없는 코드를 만들기 위하여 어떻게 const를 사용하는가 하는데 중접을 두어 정리하고자 한다.
- Const 변수
Const double PI = 3.14 이런 변수가 객체에 들어가 메모리를 차지할 필요가 없다.
차라리 #define PI 3.14 이 훨씬 간결하고 보기 좋다.
그러나 객체별로 각각 하나의 상수값을 가져야 하는 멤버함수 예를 들면
Class student
{
const int id; // id는 초기화때만 세팅이 가능, 객체가 소멸할 떄가지 불변
const string name; // 이름도 초기화하면 불변의 값
int grade;
} - Const pointer
Const int* pInt = 0 ; // pInt 가 가리키는 데이타를 보호, 반드시 초기화가 필요
int const *pInt; // pInt address 자체 즉 포인터의 변경을 금지한다.
1) pointer data를 보호Const int* pInt = new int[10]; // 반드시 초기화 필요, const 변수와 동일
Int const* pInt = new int[10]; // 위와 동일한 문장 à 틀린것은 아니나 아래것과 혼동되니 사용하지 말자
pInt[4] = 5 ; // error
중요한 것 하나는 pint를 통해서 데이타를 바꾸는 것을 보호한다는 것이지, 만일 다른 포인터를 사용하여 같은 데이타를 바꾸는 것은 허용이 된다. 즉 int* aint = pint ; 여기서 ant 를 통해서 데이타를 바꾸는 것은 문제가 없다.
2) pointer를 보호
int * const pInt = new int[10];
pInt[4] = 5; // OK
pInt++; //error
Const variable 보다는 훨씬 사용할 때가 많이 있고 또 C++ pointer의 약점을 보완해준다.
3) Pointer와 데이타 모두를 보호
Const int* const pInt = new int[10];