explicit 이란 무엇인가.
묵시적 형변환을 하지 못하도록 막는 키워드다.
명시적 형변환
예시코드
int intValue = 5;
int second = 2;
float floatValue = first / second;
float floatValue2 = (float) first / second;
// result
// 2
// 2.5
묵시적 형변환
float floatValue = first / second;
C++에서는 황당한 묵시적 형변환이 일어나곤 한다.
예시코드
class Bobo
{
public:
Bobo( int val = 0 )
{
num = val;
}
void Print() const
{
cout << num << endl;
}
private:
int num;
};
int main()
{
Bobo boo;
boo = 10;
boo.Print();
return 0;
}
// 결과
// 10
컴파일러가 class Bobo에 int형 변수를 할당하는 할당 연산자를 찾게 되는데
위 클래스에서 operator= 에 관련된 함수는 만들지 않았다.
그래서 컴파일러는 비슷한 녀석을 찾다가 int를 매개변수로 갖는 생성자를 찾아
지멋대로 pt = 10;을 pt = Point(10); 으로 변환시켜
임시 객체인 Point(10)을 복사 할당 연산자(복사 할당 연산자를 따로 만들지 않는다면
자동으로 생성)를 호출해 pt에 대입시킨다. ㅋㅋ 이걸 막아주는게 explicit 키워드이다.
처음엔 뭔 소린가 싶었다. 여러번 읽어보니 대충 감이 온다. C++은 저런것도 신경써줘야하는게 참 단점이자 장점인가 싶다..