mutable
const 함수(읽기만 가능)에서도 멤버 변수의 값을 변경할 수 있게 하는 키워드이다.
const 함수가 무엇인지 모르겠다면 아래 참고
mutable 키워드 이용하기
- 멤버 변수의 mutable 선언은 다음과 같다.
mutable int x;
const 함수로 mutable 멤버 변수 값 바꾸기
#include <iostream>
using namespace std;
class Ex {
private:
mutable int x; // 변수 mutable 선언
public:
void changeNum(int num) const; // const 함수
void printNum();
Ex(int n);
~Ex();
};
Ex::Ex(int n) {
x = n;
}
Ex::~Ex() {
};
void Ex::changeNum(int num) const {
x = num;
}
void Ex::printNum() {
cout << "x는 " << x << "입니다. " << endl;
}
int main() {
Ex ex(5);
ex.printNum();
ex.changeNum(10); // 5 -> 10 값 변경
ex.printNum();
return 0;
}
x는 5입니다.
x는 10입니다.
- 멤버 변수를 mutable 키워드를 이용하여 선언하면, const 함수로도 값을 변경할 수 있다.
- 만약 mutable 키워드를 사용하지 않고 값을 변경하면 다음과 같은 오류가 발생한다.
mutable을 왜 사용하는지
- mutable은 매우 예외적인 상황에서만 사용되는 키워드이다.
- mutable을 이용하면서까지 멤버 변수 값을 바꿀거면, const 키워드를 없애면 되는 것 아니냐고 생각할 수 있다.
- 일단! 키워드의 중요성은 mutable보다 const가 더 크다고 알아두자. ▶ const는 고려하지 않은 외부 참조에 의한 값 변경을 막을 수 있는 아주 좋은 키워드이다. const로 상수성을 부여함으로써 코드의 안정성을 높일 수 있다.
- 다만, 상황에 따라 읽기만을 하도록 정의한 함수에서 값 변경이 필요한 경우가 있다. 그러한 예는 다음 사이트들에서 잘 정리되어 있으니 참고하자.