매개변수가 기본 자료형 하나인 생성자를 말합니다. 이러한 생성자의 문제점은 사용자의 의도와 별개로 컴파일러가 암시적으로 호출할 수 있다는 점입니다.
#include <iostream>
class Money
{
public:
Money() : amount{ 0.0 } {};
Money(double _amount) : amount{ _amount } {};
double amount;
};
void display_balance(const Money balance)
{
std::cout << "The balance is: " << balance.amount;
}
int main(int argc, char* argv[])
{
Money payable{ 79.99 };
display_balance(payable); // 1. 변환이 필요X
display_balance(49.95); // 2. 변환이 필요
display_balance(9.99f); // 변환이 필요
return 0;
}
}
즉, 아래와 같이 된다.
display_balance(Money(49.95));
때문에 의도치 않은 인자를 전달했을 때도 컴파일러가 암시적 변환을 하여 컴파일 에러가 발생하지 않아 잘못된 부분을 찾기 힘들 수 있습니다.
이를 막기 위해 explicit 키워드를 사용합니다.