C++ 컴파일러가 암시적으로 형변환을 일으키지 않도록 하는 키워드. 즉, 명시적인 형변환만 가능하도록 만드는 것이다.
주로 생성자에서 활용한다.
#include <iostream>
class Money
{
public:
Money() : amount{ 0.0 } {};
explicit Money(double _amount) : amount{ _amount } {};
double amount;
};
void display_balance(const Money balance)
{
std::cout << "The balance is: " << balance.amount << std::endl;
}
int main(int argc, char* argv[])
{
Money payable{ 79.99 };
// Legal: direct initialization is explicit.
display_balance(payable); // 1
// Legal: no conversion required
display_balance(49.95); // 2
// Error: no suitable conversion exists to convert from double to Money.
display_balance((Money)9.99f); // 3
// Legal: explicit cast to Money
return 0;
}
명시적 변환 생성자를 사용하여 payable에 대한 직접 초기화를 수행할 수도 있다. 대신 Money payable = 79.99;을 복사 초기화하려는 경우에는 오류가 됩니다. (아래와 같은 경우를 말합니다)
Money paybale = 79.99;
암시적 변환을 유도할 수 있다는 편리함이 있긴 하지만 찾기 어려운 버그가 발생할 수도 있습니다. 암시적으로 발생될 특정 변환을 원하는 것이 확실한 경우 이외에는 모든 변환 생성자를 명시적으로 사용하는 것이 좋습니다.