const Keywordconst (상수 한정자): 값을 수정할 수 없게 제한한다.
const int x = 10;
// x = 20; // Error
주 목적은 Const Correctness (상수 정확성): "이 값은 변경하지 않는다"는 의도를 타입으로 표현하는 것.
const Pointerconst int* p; // 값 변경 X, 주소 변경 O
int* const p = &x; // 값 변경 O, 주소 변경 X
const int* const p; // 값 변경 X, 주소 변경 X
기억법:
const가 * 왼쪽 → 가리키는 값이 constconst가 * 오른쪽 → Pointer 자체가 constconst Parametervoid foo(const int& x);
Const Reference (상수 참조)는:
큰 객체 전달에 자주 사용한다.
void print(const std::string& str);
단순 값 전달에서는:
void foo(const int x);
함수 내부의 복사본만 수정하지 못하므로 외부 인터페이스상 의미는 작다.
const Member Functionclass Test {
public:
int getValue() const;
};
함수 뒤의 const는 객체 상태를 변경하지 않음을 의미한다.
const Test t;
t.getValue(); // OK
// t.setValue(); // Error
Const Object (상수 객체)는 const 멤버 함수만 호출할 수 있다.
const T x; // x 변경 X
const T* p; // *p 변경 X
T* const p; // p 변경 X
const T& ref; // ref를 통해 원본 변경 X
func() const; // 객체 상태 변경 X
실전에서 특히 중요한 것은 Const Reference (상수 참조)와 Const Member Function (상수 멤버 함수)이다.