키워드:
- explicit
- mutable
explicit
C++에서 explicit 키워드의 필요성은 주로 형 변환 연산자와 생성자에서 발생.
- 묵시적 변환 방지: explicit 키워드는 묵시적인 변환을 방지. 예를 들어, 한 개체를 다른 유형으로 변환하는 생성자나 형 변환 연산자가 explicit으로 표시되어 있으면, 컴파일러는 이러한 변환을 자동으로 수행하지 않음. 이는 의도치 않은 동작을 방지하고 코드의 명확성을 향상.
class MyClass {
public:
explicit MyClass(int value) : data(value) {} // 명시적 생성자
private:
int data;
};
void func(MyClass obj) {
// 함수 내에서 MyClass 객체를 사용
}
int main() {
MyClass obj = 10; // 컴파일 오류, 명시적 생성자를 호출해야 함
func(10); // 컴파일 오류, 명시적 생성자를 호출해야 함
return 0;
}
여기서 올바른 생성자 호출법은 아래 처럼 정확하게 생성자를 호출해줘야함.
int main() {
MyClass objExplicit = MyClass(10); // 명시적 생성자 호출
func(MyClass(10)); // 명시적 생성자 호출
return 0;
mutable
mutable 키워드는 C++에서 클래스 멤버 변수를 변경 가능하게 하는 데 사용. 보통 클래스의 멤버 변수는 해당 클래스의 객체가 변경되면 값도 함께 변경. 그러나 mutable 키워드로 표시된 멤버 변수는 객체의 불변성(invariant)을 유지하면서도 상태가 변경될 수 있음
mutable 키워드가 필요한 주요 경우 예
- 불변 객체 내부의 상태 변경: 불변 객체의 경우 내부 상태를 변경할 수 없지만, 일부 상황에서는 내부적인 상태를 변경해야 할 수 있다. mutable 키워드를 사용하여 불변 객체 내부의 특정 변수를 변경 가능하게 표시함으로써 객체의 불변성을 유지하면서 내부적인 상태를 변경
class Cache {
public:
int getValue() const {
if (!isCached) {
cachedValue = computeValue(); // 캐싱된 값 계산
isCached = true;
}
return cachedValue;
}
private:
mutable int cachedValue; // 캐싱된 값
mutable bool isCached = false; // 캐시 여부
int computeValue() const {
// 계산 비용이 많이 드는 연산
return 42;
}
};
-> 계산 비용이 많이 드는 연산의 결과를 캐싱하여 성능을 향상시키는 경우의 예제이다. 잘사용하진않지만 알아놓으면 좋다
'Language > C++' 카테고리의 다른 글
[c++][씹어먹는 c++] 5 - 1. 연산자 오버로딩 (0) | 2024.04.25 |
---|---|
[c++][씹어먹는 c++] 4.4 스타만들기(const, static) (0) | 2024.04.22 |
[c++][씹어먹는 c++] 4.3 스타만들기(복사 생성자, 소멸자) (1) | 2023.10.17 |
[c++][씹어먹는 c++] 4.2 클래스의 세계 (0) | 2023.10.16 |
[c++][씹어먹는 c++] 4.1 이 세상은 객체 (1) | 2023.10.16 |
댓글