Effective C++
낌새만 보이면 const를 들이대자
Keisa
2024. 5. 18. 15:46
멤버함수에 붙은 const 키워드의 장점
1. 클래스의 인터페이스를 이해하기 좋게 하기 위함
: 그 클래스로 만들어진 객체를 변경할 수 있는 함수는 무엇이고, 또 변경할 수 없는 함수는 무엇인가를 사용자쪽에서 알고 있어야 한다.
2. 상수객체를 사용할 수 있게 하자
: c++ 프로그램의 실행 성능을 높이는 핵심 기법 중 하나가 객체 전달을 '상수 객체에 대한 참조자'로 진행하는 것임. 이때, 이 기법이 제대로 살아 움직이려면 상수 상태로 전달된 객체를 조작할 수 있는 const 멥버 함수, 즉 상수 멤버 함수가 준비되어 있어야 한다는 것이 포인트
어떤 멤버 함수가 상수 멤버(const)라는 것의 의미
1. 비트수준 상수성, 다른 말로 물리적 상수성
: 비트수준 상수성은 어떤 멤버 함수가 그 객체의 어떤 데이터 멤버도 건드리지 않아야 그 멤버 함수가 const임을 인정하는 개념. 즉, 객체를 구성하는 비트들 중 어떤 것도 바꾸면 안된다는 것. 비트수준의 상수성 위반을 검사하기 위해서는 컴파일러가 대입연산이 수행되었는지만 검사하면 된다. c++에서 정의하는 상수성이 비트수준 상수성.
2. 논리적 상수성
class CTextBlock
{
public:
// - 생략 -
char& opertator[](std::size_t position) const
{ return pText[[position]; }
private:
char* pText;
}
operator[]의 내용은 상수성을 지키는 함수로 문법적으로는 문제가 없다. 그러나 해당함수를 통해 전달받은 pText의 주소를 통해 내용을 수정할 수 있게되었다. 이런 문제를 보완하기 위한 것이 논리적 상수성.
const 변수에 mutable을 붙여서 사용하는 것. 그러나 특정한 경우를 제외하고는 mutable 선언은 권장되지 않는다.