[c++] static member function에는 const 선언을 할 수 없다

숭글·2022년 12월 12일
0

보통 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 인지, 클래스 인지 명시해줄 필요가 없다.

왜 에러까지 뜨는지는 모르겠지만.. 이유를 아니 기분은 좋다 🙂

👆 실제 에러 문구

profile
Hi!😁 I'm Soongle. Welcome to my Velog!!!

0개의 댓글