[C/C++] mutable, explicit

그림자왕국·2020년 10월 26일
0

C++

목록 보기
7/24
post-thumbnail

mutable

mutable 키워드가 들어간 변수는 const 함수 내에서도 값을 변경할 수 있다.

class Cat {
	int x;
	mutable int v;
	void speak() const {
    	x = 10; // const 에러 발생!
		v = 22; // mutable 변수는 괜찮음
		cout << "hi" << endl;
	}
};

explicit

explicit 지정자는 묵시적 형변환을 방지하기 위해 멤버 함수에서 사용된다.

class Cat {
	explicit Cat(int age) {}
};

Cat n = 30; // Compile error!
Cat n(30); // ok

또는

explicit A(int n) : num(n) {};
void printA(A a) {}

printA(10); // Compile error!

위의 코드에서는 printA(A a) 함수의 인자로 들어오는 26이라는 숫자가 컴파일러에 의해

선언부에서 묵시적 형변환이 일어나 A로 바뀌게 되어 A(int 26)이라는 생성자를 호출하게 된다.

이러한 암묵적인 형변환을 막기 위해 explicit 지정자를 함수에 적용하면 정확한 인수(객체) 대신

정수를 넣고 해당 정수값을 토대로 생성자를 호출하는 느슨한 규약을 타이트하게 막을 수 있다.


위처럼 생성자에 explicit 키워드를 사용한다면 사용자가 원치 않은 형변환이 일어나는 등의

예기치 않는 버그를 사전에 방지할 수 있다.

profile
언리얼 엔진 매니아입니다.

0개의 댓글