C++ mutable 키워드

프로그래밍/C++ 2019.11.06 댓글 Plorence

mutable 키워드는 특정 구조체나 클래스가 const로 선언되어 있다 하더라도 특정 멤버를 변경할 수 있음을 나타내는 데 사용할 수 있습니다.

 

예제

의도는 const 객체여도 int형 변수의 읽기/쓰기가 가능한 클래스를 만들려고 합니다.

(cosnt의 의도를 완전히 무시하는 거라 좋지 못하고 불필요한 클래스입니다.)

#include <iostream>
class TEST
{
private:
       int number;
public:
       void SetNumber(int n) const {
              number = n;
       }
       int GetNumber() const {
              return number;
       }
};
int main(void) {
       TEST test1;
       const TEST test2;
       test1.SetNumber(100);
       test2.SetNumber(200);
}

객체가 const라면 멤버 함수를 호출하기 위해서 함수 매개변수 뒤에 const라는 걸 써주어야 합니다.

그 이유는, 그 멤버함수가 멤버의 값을 변경안한다는 보장이 없기 때문입니다.

써줄 시에는 이때 발생하는 문제점이, 매개변수 n을 멤버 number에 대입이 불가능합니다.

이것을 해결하기 위해 mutable 키워드가 있습니다.

mutable 키워드는 함수 매개변수 뒤에 const가 선언됐다고 하더라도 해당 변수의 값을 변경할 수 있습니다.

#include <iostream>
class TEST
{
private:
       mutable int number;
public:
       void SetNumber(int n) const {
              number = n;
       }
       int GetNumber() const {
              return number;
       }
};
int main(void) {
       TEST test1;
       const TEST test2;
       test1.SetNumber(100);
       test2.SetNumber(200);
}

댓글