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 |
---|