상수(const)
const 는 코드의 안정성을 높이는 중요한 키워드이다!
1. const 변수
다음 const 키워드의 의미를 확인해보자
const int num = 10; // 변수 num 을 상수화
const int &refer = num; // 레퍼런스의 값을 변경할 수 없음
const int *ptr1 = &val1; // 포인터 ptr1 을 이용해서 val1 의 값을 변경할 수 없음
int * const ptr2 = &val2; // 포인터 ptr2 가 상수화 됨
const int * const ptr3 = &val3; // 포인터 ptr3 가 상수화 되었으며, ptr3 를 이용해서 val3 의 값을 변경할 수 없음2. const 함수
const 함수 내에서는 const 함수가 아닌 함수의 호출은 컴파일 에러
다음 const 키워드의 의미를 확인해보자
int GetX() const; // 이 함수 내에서 멤버변수에 저장된 값을 변경하지 않겠다.3. const 사용의 TIP
3-1. 참조자를 이용한 Call-by-reference 단점을 해결한 const 참조자
예를 들어서 코드를 분석하는 과정에 있다면, 함수의 호출문장만 보고도 함수의 특성을 어느 정도 판단할 수 있어야 한다. 그러나 참조자를 사용하는 경우, 함수의 원형을 확인해야 하고, 확인결과 참조자가 매개변수의 선언에 있다면, 함수의 몸체까지 문장 단위로 확인을 해서 참조자를 통한 값의 변경이 일어나는 지를 확인해야 한다.
const 를 통해 해당 단점을 해소할 수 있다. -> 함수 내에서, 참조자를 통한 값의 변경을 진행하지 않을 경우, 참조자를 const 로 선언해서, 함수의 원형만 보더라도 값의 변경이 이뤄지지 않음을 알 수 있게 한다. -> 메서드 내에서 변하기 않는 값이라면, const 를 사용하자!
아래 코드를 보자
다음의 논리적인 허점을 주의하자..!
3-2. 참조자의 상수 참조를 통한 리터럴 연산 함수
20, 30 과 같은 리터럴 값들은 다음의 특징을 갖는다. -> 임시적으로 존재하는 값이다. 다음 행으로 넘어가면 존재하지 않는 상수이다.
만약 리터럴 값을 매개변수로 받아 연산을 해야하는 함수라면 어떻게 하는가?
아래 코드를 보자
Last updated