Explicit 키워드는 사용자가 원하지 않은 형변환이 일어나는 것을 제한하는 키워드이다.

#include <iostream>

class A {
public:
	int num;
	
	A(int n) { 
		num = n; 
	}
};
void printA(A a) {
	std::cout << a.num << std::endl;
}
int main() {
  	int n = 26;
	printA(n);
}

 

위의 코드를 실행 시키면 printA(n)에서 n은 정수형 이었다가 A형으로 형변환이 일어난다. 컴파일러가 자동으로 이러한 형변환을 막기위해 Explict 키워드를 사용한다. 이때, 형변환은 생성자 A(int n)에 의해 일어난다.

#include <iostream>

class A {
public:
	int num;
	
	explicit A(int n) { 
		num = n; 
	}
};
void printA(A a) {
	std::cout << a.num << std::endl;
}
int main() {
  	int n = 26;
	printA(n);//Error!
}

위 코드를 실행시키면 에러가 발생한다. 생성자 A(int n)에 Explicit 키워드를 사용하면 컴파일러가 알아서 정수형인 n을 A로 형변환 시키는 것을 막는다. 그 때문에 printA(n)에서 error가 발생한다.

int main() {
  	int n = 26;
	printA(A(n));
}

그러므로 위와 같이 main함수를 바꿔 주어야 한다. Explicit 키워드를 사용하면 개발자가 상황에 맞게 직접 형변환을 해줘야 한다.

 

Explicit 키워드를 사용하지 않으면 사용자가 원치않은 형변환이 일어날 수 있다.

그러므로 예기치 않은 형변환이 일어나는 등의 버그를 막기 위해 Explicit을 사용해주는 것이 좋다.

 

'C++' 카테고리의 다른 글

공백 포함 문자열 입력받기  (0) 2022.06.28

+ Recent posts