const란, 대상을 변경하지 않는 상수
를 의미한다.
관련 설명 참고! - Effective C++을 읽고 정리한 글입니당~
const가 가지고 있는 상수성.
"외부에서 변경이 되지 않음"이 가지는 속성때문에, 임의로 변경되지 않도록 설정하고 싶을 때 사용하면 좋다.
const_cast
를 이용해서 오버로딩된 상수함수 호출 가능void SetParam(int _val) const; // A : 상수 함수
void SetParam(int _val); // B : 비상수 함수
const_cast
는 캐스팅 연산자로, 상수성(const) 을 제거해준다.
const로 선언된 변수를 가리키는 포인터 변수에 대해, const 변수의 상수성은 유지한 채 포인터만 const 속성을 해제해준다.
원본은 변경하지 않으므로 안전하다.
단, 포인터를 통해 값을 변경한 뒤 원본 값을 새로운 포인터로 넘겨받는다면 바뀐 값이 넘어간다. 주의~!
const_cast 사용 조건
- const로 선언된 포인터만 const를 풀어줄 수 있다.
- 포인터가 아닌 일반 변수의 const는 풀어줄 수 없다.
- 함수 포인터, 멤버 함수에 대한 const는 풀어줄 수 없다.
캐스팅 관련 개념 참고! - Effective C++을 읽고 정리한 글입니당~
하부 수준 캐스팅 (포인터 -> int 등)을 위해 만들어졌다.
정말 row한 느낌의 캐스팅.
안전한 다운캐스팅을 할 때 사용한다.
어떤 객체가 클래스 상속 계통에 속한 특정 타입인지 결정하는 작업에 쓰인다.
런타임 비용이 높으므로, 주의 또 주의해서 사용해야 한다.
웬만하면 사용하지 말 것!
암시적 변환을 강제로 진행할 때 사용한다.
주된 사용 예)
상수로 선언된 객체에서, mutable로 선언된 특정 멤버 변수에 대해서는 변경을 허용하겠다는 의미
상수 객체에서 특정 변수만 값을 변경하고 싶을 때 사용한다.
어떠한 const 멤버 함수 안에서, 특정 변수에 대해서는 const가 아닌 작업을 할 수 있도록 해준다.
참고
모두의 코드 : https://modoocode.com/253