보통 get함수에는 const 선언을 해서 불변성을 보장해준다.
근데 static멤버 변수에 접근하는 static member 함수는 const 선언을 했을 때 에러가 발생하는 것을 확인했다. 😢
class Account {
public:
static int getAmount( void ) const; ❌
static int getAmount( void ); ⭕️
...
private:
static int _amount;
...
};
static member 함수는 각 객체마다 존재하는 게 아니라 클래스 당 하나만 존재한다. (어떤 객체에서 그 함수에 접근하든 주소가 같다.)
member 함수에서 const 선언을 하면 this포인터의 타입은 클래스의 const 포인터가 된다. (위 코드를 예로 들면 Account const*가 된다.)
반대로, const 선언을 하지않은 member함수의 this 포인터 타입은 클래스의 포인터가 된다.
위에 적었듯이 static member 함수는 각 객체마다 존재하는 것이 아니기 때문에 this포인터를 사용할 수 없다.
-> this포인터의 타입이 클래스 const 인지, 클래스 인지 명시해줄 필요가 없다.
왜 에러까지 뜨는지는 모르겠지만.. 이유를 아니 기분은 좋다 🙂
👆 실제 에러 문구