explicit
explicit 키워드는 주로 생성자와 변환 연산자에 사용되며, 해당 생성자나 변환 연산자가 암시적 변환(implicit conversion)을 허용하지 않도록 지정한다.
예를 들어, explicit 키워드가 없는 생성자를 가진 클래스가 있을 때:
class Test {
public:
Test(int x) {}
};
void func(Test t) {}
int main() {
func(42); // int에서 Test로 암시적 변환 가능
}
위의 코드는 func(42)에서 int 타입의 42가 Test 타입으로 암시적 변환되어 func 함수에 전달된다.
explicit 키워드가 생성자에 지정된 경우:
class Test {
public:
explicit Test(int x) {}
};
void func(Test t) {}
int main() {
func(42); // 컴파일 오류! 암시적 변환 불가
}
이렇게 explicit 키워드는 암시적 변환을 방지하여 예기치 않은 변환을 막고 코드의 명확성을 높이는 데 도움을 준다.