인수 일치
오버 로드 된 함수에 대 한 함수 호출에 제공 된 인수를 현재 범위에서 함수 선언의 가장 일치 하는 선택 됩니다.적절 한 함수를 찾을 수 있으면 해당 함수가 호출 됩니다. 이때 적절 한"여기에서 다음 중 하나 있습니다.
정확 하 게 일치 찾을 수 있습니다.
간단한 변환을 수행 합니다.
정수 계열 확장을 수행 했습니다.
원하는 인수 형식 표준 변환이 있습니다.
사용자 정의 변환 (변환 연산자 또는 생성자) 원하는 인수 형식이 존재합니다.
인수에 줄임표가 표시를 찾을 수 없습니다.
컴파일러는 함수의 각 인수에 대 한 후보 집합을 만듭니다.후보 함수에는 해당 위치에서 실제 인수를 정식 인수 형식으로 변환할 수 있습니다 함수입니다.
각 인수에 대 한 일련의 "함수를 일치 하는 최고" 제공 되며 선택한 함수의 모든 집합의 교집합입니다.교차 함수가 두 개 이상 포함 된 경우는 오버 로드 모호 및 오류가 발생 합니다.최종적으로 선택 하는 함수는 항상 하나 이상의 인수에 대 한 그룹의 다른 모든 함수 보다 적합 한 일치입니다.분명 승자가 되지 않습니다 (있는 경우)의 경우 없으면 함수 호출에서 오류가 발생 합니다.
다음 선언을 참조 (함수 표시 된 Variant 1, Variant 2, 및 Variant 3, 다음 설명에서 id에 대 한).
Fraction &Add( Fraction &f, long l ); // Variant 1
Fraction &Add( long l, Fraction &f ); // Variant 2
Fraction &Add( Fraction &f, Fraction &f ); // Variant 3
Fraction F1, F2;
다음 문을 살펴보겠습니다.
F1 = Add( F2, 23 );
위의 내용은 두 집합을 빌드합니다.
세트 1: 형식 분수 값의 첫 번째 인수가 후보 함수 |
2 세트: 후보 함수를 둘째 인수 변환 형식 int |
---|---|
변형 1 |
변형 1 (int 으로 변환할 수 있습니다 long 표준 변환을 사용 하 여) |
변형 3 |
|
함수 설정 2에서 가지 함수를 실제 매개 변수의 형식이 형식 매개 변수 형식으로 암시적 변환이 되지 및 사이에서 이러한 함수는 함수 "실제 매개 변수의 형식이 해당 형식 매개 변수 형식으로 변환 하는 비용"에 대 한 가장 작은 수입니다.
이러한 두 집합의 교집합 Variant 1입니다.모호한 함수 호출의 예가입니다.
F1 = Add( 3, 6 );
앞의 함수 호출의 집합을 작성합니다.
후보 함수는 한 첫 번째 인수 형식 int 1 세트: |
2 세트: 후보 함수는 한 두 번째 인수 형식 int |
---|---|
2 변형 (int 으로 변환할 수 있습니다 long 표준 변환을 사용 하 여) |
변형 1 (int 으로 변환할 수 있습니다 long 표준 변환을 사용 하 여) |
참고 이러한 두 집합 사이의 교차 비어 있습니다.따라서 컴파일러가 오류 메시지를 생성 합니다.
일치 하는 함수에 인수에 대 한 n 는 기본 인수를 취급 하는 n+ 1 별도 기능, 각각 서로 다른 개수의 인수입니다.
와일드 카드로 줄임표 (...) 작동 합니다. 실제 인수를 찾습니다.주의 오버 로드 된 함수 집합을 디자인 하지 경우이 많은 모호한 집합에 발생할 수 있습니다.
[!참고]
모호성의 오버 로드 된 함수는 함수 호출 나타날 때까지 확인할 수 없습니다.때, 각 인수에 대 한 함수 호출에 대 한 집합으로 만들어집니다 및 오버 로드가 모호 하지 있는지 여부를 확인할 수 있습니다.따라서 특정 함수 호출에 의해 표시 되는 때까지 모호성이 코드에 남아 있을 수 있습니다.