더북(TheBook)

다음 코드 조각은 컴파일된다. 그러나 f를 호출할 때 문제가 발생한다.

int i = 3;
const int ci = 4;
f(3);
f(i);
f(ci);

모든 경우에 대해 가장 일치하는 오버로드는 값 인수를 갖는 첫 번째 오버로드의 인수에 레퍼런스 지정자가 있는 인수를 갖는 오버로드 중 하나이므로 세 함수 호출 모두 모호하다. 레퍼런스와 값 인자를 갖는 오버로드가 혼합되어 있을 경우 대부분 실패한다. 따라서, 한 오버로드가 레퍼런스 지정자가 있는 경우 다른 오버로드의 인수도 레퍼런스 지정자가 있어야 한다. 우리는 값 인자 오버로드를 생략해 예제에 있던 모호한 오버로딩 문제를 해결할 수 있다. 그러면 f(3)f(ci)는 상수 레퍼런스가 있는 오버로드로, f(i)가 변수 레퍼런스가 있는 오버로드로 변환된다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.