{
즉, 암시적 타입 변환을 피하기 위해 오버로딩을 쓰라는 것이다, 그 이유는 C++은 동일한 이름의 함수라면 매개변수로 함수들을 구분짖는데, 이런 함수들 중에서 전달된 인자와 타입이 가장 "비슷한" 함수가 있다면, 암시적으로 형이 변하기전에 그 함수가 호출 되고, 없다면 모호성 에러를 벹어내게 해주기 때문이다.
즉, 이런 C++의 특징을 이용하여, 암시적 타입 변환을 피하라는 것이다.
다음 코드는 함수 f() 들 중에 float 매개변수를 받는 함수가 없을 때, 모호성 에러를 벹어내며서 컴파일 되지 않는 것을 보여 준다.
모호성 에러 예)
사실 정수형의 경우 상호 암시적인 형변환이 가능하며, 실수형 역시 마찬가지고, 기분 좋게도 참조형의 경우 암시적인 형변환은 절대 발생하지 않는다. 예외적으로 오버로딩된 함수 호출 에선, 함수의 매개변수가 객체이고, 객체의 생성자가 함수에 들어온 인자를 받아주지 않는 이상, 형 변환은 이러나지 않는다. 그래서 위의 코드에선 모호성 에러를 벹어 내는 것이다.
아참, 암시적 형변환이 일어날 때를 정리 안했다. 암시적 형변환을 볼수 있는 대표적인 예로 std::string 클래스를 볼 수 있다. std::string의 생성자 중 char* 를 받는 녀석이 있있기 때문인데, 만약 std::string 을 매개변수로 받는 함수가 있을 경우, char*를 그 함수에 전달하면 std::string 의 생성자(char*)가 호출 되면서 임시 객체 std::string 이 만들어 지고, std::string 을 매개변수로 하는 함수가 호출 되어 진다.
암시적 형 변환의 예 )
자 정리 끝
}
최근댓글