const는 어떤 값이 불변이어야한다는 제작자의 의도를 컴파일러 및 다른 프로그래머와 나눌 수 있는 수단이다.
void f1( const Widget *pw) ;
void f2(Widget const *pw) ;
는 의미적으로 동일하다.
함수에 대한 const : “해당 멤버 함수가 상수 객체에 대해 호출될 함수 이다”
중요성
1. 클래스의 인터페이스를 이해하기 좋게 하기 위해서.
- 클래스로 만들어진 객체를 변경할 수 있는 함수는 무엇이고, 또 변경할 수 없는 함수는 무엇인가를 사용자 쪽에서 알수 있게 해준다.
2. 이 키워드를 통해 상수 객체를 사용할 수 있게 해준다.
- c++ 프로그램의 실행 성능을 높이는 핵심 기법 중 하나인 객체 전달을 ‘상수 객체에 대한 참조자(reference-to-const) ’로 진행하는 것이기 때문이다. 그런데 이 기법이 제대로 살아 움직이려면 상수 상태로 전달된 객체를 조작할 수 는 const 멤버 함수, 즉 상수 멤버 함수가 준비되어 있어야 한다.
## const 키워 가 있고 없고의 차이만 있는 멤버 함수들은 오버로딩이 가능하다.
class TextBlock {
public :
const char& operator[] (std: :size_ t position) const
{ return text[position]; }
char& operator [] (std : :size_ t position)
{ return text[position] ; }
private:
std : :string text ;
};
TextBlock tb( "Hello " ) ; --> 비상수 멤버함수 호출
std : : cout << tb[0] ;
const TextBlock ctb ( "World " ) ; --> 상수 멤버함수 호출
std : :cout << ctb[0] ;
비트수준 상수성: 어떤 멤버함수가 그 객체의 어떤 데이터 멤버도 건드리지 않아야 그 함수가 const임을 인정.
논리적 상수성: 상수 객체의 입장에서 프로그래머가 판단한 상수성의 범위 에 있다면 const임을 인정.
컴파일러가 에러를 내는 것을 막아주는 방법: mutable: const 함수 내에서도 수정이 가능하게 하는 키워드
ex) mutable std : :size_ t textlength ;
c스타일 캐스팅:
c++ 스타일 캐스팅: