explicit, mutable
암시적 형 변환 (implict type conversion)
- 컴파일러가 자동으로 하나의 기본 자료형을 다른 자료형으로 변환해준다.
- 한 기본 자료형이 예상되지만 다른 기본 자료형이 제공될 때마다 수행한다.
- 변환을 수행하는 방법을 컴파일러에게 명시적으로 알려 주지 않는다.
- 한 자료형의 값을 더 큰 자료형으로 승격할때 사용해도 좋다.
- 사용자가 의도하지 않은 암시적 변환이 일어날 수 있다.
- 자동 형 변환이라고 불린다.
명시적 형 변환(explicit type conversion)
- 형 변환을 하기 위해 형 변환 연산자를 사용한다.
- 컴파일러에서 생성자를 explicit로 선언한다면 다른 생성자를 이용한 암시적 변환을 수행하지 않도록
막을 수 있다.
- 해당 생성자가 복사 생성자의 형태로 호출되는 것도 막을 수 있다.
ex)
explicit 생성자명(자료형);
mutable
- 특정 구조체, 클래스가 const로 선언되어 있어도 특정 멤버 변수를 변경할 수 있게 해준다.
- const 함수 안에서 해당 멤버 변수에 const가 아닌 작업을 할 수 있게 만들어준다.
ex)
mutable 자료형 변수명;
class A {
mutable int data_;
public:
A(int data) : data_(data) {}
void DoSomething(int x) const {
data = x;
}
int main() {
A a(10);
a.DoSomething(3);
}
const 함수인 DoSomething()에서 data_ 변수를 mutable로 선언해주었기 때문에
data_의 값을 x로 바꿀 수 있다. (mutable이 없다면 에러 발생)
'c++' 카테고리의 다른 글
오버라이딩, 가상함수 (0) | 2020.08.20 |
---|---|
String class (0) | 2020.08.18 |
초기화 리스트 (Initializer list) (0) | 2020.08.17 |
참조자 (레퍼런스 - reference) (0) | 2020.08.17 |
이름 공간 - namespace (0) | 2020.08.15 |