[C++ 문법] 'mutable' 예약어와 'const_cast<>' 형변환 연산자
알다시피 'const' 키워드는 '읽기'만 하는 곳엔 무조건 붙여주는게 좋습니다. 만약 '읽기' 기능만 있는 멤버함수라면 당연히 'const' 키워드를 붙여줌으로써 멤버함수를 상수화할 수 있습니다. 하지만, 미래에 코드를 수정하면서 상수화시켰던 멤버함수에 '쓰기' 기능을 추가해야한다면 어떻게 해야 할까요? 이런 상황에 맞닥뜨릴때 사용할 수 있는 것이 'mutable' 예약어와 'const_cast<>' 형변환 연산자입니다.
상수화된 멤버함수는 '읽기'만 가능하지만, 'mutable' 키워드로 선언된 멤버변수에는 '쓰기'가 가능합니다.
class MyData {
private:
mutable int m_nData = 0;
public:
MyData(int nParam) : m_nData{ nParam } { /* do somthing */ }
~MyData() { /* do somthing */ }
int SetData(int nParam) { m_nData = nParam; }
int GetData() const {
m_nData = 20; // 상수형 메서드지만 'mutable 멤버변수'에는 '쓰기'가 가능합니다.
return m_nData;
}
}
void main() {
MyData data{ 10 };
cout << data.GetData() << endl;
}
또 다른 'const' 키워드의 대표적인 사용 예가 함수 매개변수의 상수화입니다. 함수의 매개변수가 상수형 참조자인 경우 당연히 '읽기'만 가능하지만, 해당 매개변수를 'const_cast<>' 형변환 연산자를 이용해 형변환을 한다면 '쓰기'가 가능해집니다.
void Func(const int& nParam) {
int& nNewParam = const_cast<int&>(nParam); // 상수형 참조에서 일반 참조로 형변환을 수행합니다.
nNewParam = 20; // 일반 참조로 형변환을 수행했기 때문에 '쓰기'가 가능해집니다.
}
void main() {
int nData = 10;
Func(nData);
cout << nData << endl;
}
'Programming > C C++' 카테고리의 다른 글
[C++ 문법] '복사 생성자' (0) | 2019.05.20 |
---|---|
[C++ 문법] '정적(static) 멤버' (0) | 2019.05.20 |
[C] 'inline 함수' (0) | 2019.05.19 |
[C++ 문법] '디폴트 매개변수' (0) | 2019.05.19 |
[C++ 문법] '템플릿(template)' (0) | 2019.05.17 |
댓글
이 글 공유하기
다른 글
-
[C++ 문법] '복사 생성자'
[C++ 문법] '복사 생성자'
2019.05.20 -
[C++ 문법] '정적(static) 멤버'
[C++ 문법] '정적(static) 멤버'
2019.05.20 -
[C] 'inline 함수'
[C] 'inline 함수'
2019.05.19 -
[C++ 문법] '디폴트 매개변수'
[C++ 문법] '디폴트 매개변수'
2019.05.19