@ 16. 1 ~ 17. 1/Effective C++

const 멤버 함수의 종류, const 함수내에서 수정가능한 경우

namoeye 2015. 12. 4. 00:31

 멤버함수에 붙는 const 키워드 역활은 해당 멤버함수가 상수 객체에 대해 호출될 함수이다 라는 사실을 알려 주는 것이다.

이런 함수가 중요한 이유는?

1. 클래스의 인터페이스를 이해하기 좋게 하기 위한것.

그 클래스로 만등러진 객체를 변경할 수 있는 함수는 무엇이고, 또 변경할 수 없는 함수는 무엇인가? 사용자 쪽에서 알고 있어야 하는것..

 2. 이 키워드를 통해서 상수객체를 사용할 수 있게 하자

프로그램의 실행 성능을 높이는 핵심 기법 -> 상수 객체에 대한 참조자로 진행

* 실제 프로그램에서 상수 객체가 생기는 경우 1) 상수 객체에 대한 포인터 혹은 2) 상수 객체에 대한 참조자로 객체가 전달될때..

단순 상수객체 변수의 상황은 거의 없다고 봐도 무방하다..

void print(const Test& ref); //이런식의 형태가 많다

이런 함수들의 대부분은 내부에서 무언가 대입을 하려거나 변경하려고 하지 않는다. 에러가 나기 때문에..

 


 

 

 

1. const 함수내에서(반환, 함수명, const 형태) static 멤버의 대입과 수정은 가능하다

그 이유는 static 멤버는  객체의 소유가 아니라 클래스 자체의 소유이기 때문이다.

클래스 변수라고도 한다.

 

2. 멤버로 포인터가 있는데 그 포인터가 가리키는 값을 변경하려는 경우

const 함수내에서 가능하다. int* ptr 을 예로

*ptr = 10 이런식..

그러나

주소를 변경하려고 하면 컴파일 에러가 발생한다.

 

3. mutable 은 비정적 데이터 멤버를 상수성의 족쇄에서 풀어준다. 즉 대입이 가능하게 해준다.