Pointer
*
왼쪽에 const
가 있으면 값을 고정합니다.
*
오른쪽에 const
가 있으면 주소를 고정합니다.
const int*
과 int const*
는 같습니다.
int main() {
int num1 = 10;
int num2 = 20;
const int* a = &num1;
int const* b = &num1;
int* const c = &num1;
const int* const d = &num1;
int const* const e = &num1;
a = &num2;
b = &num2;
//c = &num2; // error
//d = &num2; // error
//e = &num2; // error
//*a = 30; // error
//*b = 30; // error
*c = 30;
//*d = 30; // error
//*e = 30; // error
return 0;
}
Member Function and Variable
- 맴버 함수가 해당 객체의 상태를 변경하지 않는다면
const
로 표시합니다.
const
오브젝트는 non-const
맴버 함수를 사용할 수 없습니다.
const
오브젝트도 mutable
하거나
인터 멤버를 통해 접근하는 객체에 대해서는 값 수정이 가능합니다.
class Point {
int x, y, i;
mutable int j;
public:
// int getx() { return x;} // error
int getx() const { return x;}
void f() const {
// i++; // error
j++;
}
};
void f1(const Point& pt) {
int x = pt.getx();
}
기타
const
속성을 타
변환을 통해 해지하는 방법은 가능한 피하는 것이 좋습니다. 라이브러리 안에 들어있어 직접 수정할 수 없다든가 하는 이유로 사용하는 임시방편입니다.
const
는 성능상의 이유가 아닌, 유지 보수를 위해 사용합시다. const
는 코드의 가독성을 높히고, 의도하지 않은 동작으로 인한 에러를 방지합니다.
Reference