다음을 통해 상수의 사용을 정확하게 이해하자.
/* //------------------------------------------------------------------------------- case 1: const변수에 초기화 - 멤버 변수를 initializer 를 통해 초기화 해야 한다. */ class AA{ const int conval; .... } AA():conval(2) { ..... } /* //------------------------------------------------------------------------------- case 2: Member함수가 const가 되면, 이 함수를 통해서 멤버 변수의 값이 변경되는 것은 허용되지 않는다.. */ /* //------------------------------------------------------------------------------- case 3: const 함수는 non const함수의 호출을 허용하지 않을 뿐만 아니라 멤버 변수의 포인터를 리턴하는 것도 허용하지 않는다. */ /* //------------------------------------------------------------------------------- case 4: 객체가 const되면 어떤 경로를 통해서든 멤버 변수의 변경은 불가능. 멤버 상수 함수만 호출 가능. 일반 멤버 함수는 값을 변경하지 않아도 호출 불가능 */ /* //------------------------------------------------------------------------------- case 5: #define보다 const를 사용하므로 debugging이 편리하다. */ /* //------------------------------------------------------------------------------- case 6: 변수의 상수화는 값의 변경을 허용하지 않는다. */ const double PI=3.14; PI=3.1415; //<--Compile error /* //------------------------------------------------------------------------------- case 7: 초기화를 어디서 하는냐에 따라 값은 달라진다. */ const int val; //variable val is already initialized by a garbage value val = 20; //<--compile error /* //------------------------------------------------------------------------------- case 8: const와 pointer */