implicit type casting(암시적 또는 묵시적 형 변환)을 방지하기 위해 사용되는 키워드입니다.
explicit 키워드는 생성자(constructor)와 변환 연산자(operator Type())에만 사용할 수 있습니다.
C++에서 컴파일러는 때때로 자동으로 형 변환을 수행합니다.
<예시> | 암시적 형 변환
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass(int x) {
cout << "MyClass: " << x << endl;
}
};
void printValue(MyClass obj) {
cout << "printValue" << endl;
}
int main() {
printValue(10); // 암시적 형 변환: 10이 MyClass(10)으로 변환됨
return 0;
}
결과
<예시> | explicit 사용
#include <iostream>
using namespace std;
class MyClass {
public:
explicit MyClass(int x) {
cout << "MyClass: " << x << endl;
}
};
void printValue(MyClass obj) {
cout << "printValue" << endl;
}
int main() {
// printValue(10); // 컴파일 오류 : explicit 키워드로 인해 암묵적 형 변환이 안됨.
printValue(MyClass(10)); // 명시적 호출
return 0;
}
잘못 사용할 경우 코드가 더 복잡해질 수 있으므로, 필요할 때만 사용하는 것이 좋습니다.
<예시> | 변환 연산자
#include <iostream>
using namespace std;
class MyClass {
public:
explicit operator int() {
return 42;
}
};
int main() {
MyClass obj;
// int x = obj; // 컴파일 오류 : explicit 키워드 때문에 암묵적 형 변환이 불가능
int x = static_cast<int>(obj);
cout << x;
}
결과
