Share via


La coincidencia de argumento

las funciones sobrecargadas son seleccionado para la mejor coincidencia de declaraciones de función en el ámbito actual a los argumentos proporcionados en la llamada de función.Si se encuentra una función adecuada, se llama a esa función. "Conveniente” en este contexto significa lo siguiente:

  • Una coincidencia exacta se encontró la coincidencia.

  • Una conversión trivial se realizó.

  • Una promoción completa se realizó.

  • Una conversión estándar al tipo deseado del argumento existe.

  • Una conversión definida por el usuario (operador de conversión o constructor) en el tipo deseado del argumento existe.

  • Los argumentos representados por puntos suspensivos encontrados.

El compilador crea un conjunto de funciones de candidato para cada argumento.Las funciones de candidato son funciones en las que el argumento real en esa posición se puede convertir al tipo de argumento formal.

Compila un conjunto de “funciones que coinciden con los mejores” de cada argumento, y la función seleccionada es la intersección de todos los conjuntos.Si la intersección contiene más de una función, la sobrecarga es ambiguo y genera un error.La función que es finalmente seleccionado es siempre una mejor coincidencia que cada otra función en el grupo al menos un argumento.En caso contrario (si no hay ganador claro), la llamada a la función genera un error.

Considere las siguientes declaraciones (las funciones son Variant 1marcado, Variant 2, y Variant 3, para identificar en la siguiente descripción):

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;

Considere la siguiente instrucción:

F1 = Add( F2, 23 );

Las versiones anteriores de la instrucción dos conjuntos:

conjunto 1: El candidato funciona argumento de Que Tenga First de fracción tipo

conjunto 2: El candidato funciona argumento Capacidad de Whose Second se convierte para escribir int

Variante 1

Variante 1 (int se puede convertir en long mediante una conversión estándar)

Variante 3

 

Las funciones del conjunto 2 son funciones que hay conversiones implícitas del tipo de parámetro real al tipo de parámetro formal, y entre esas funciones hay una función que “costo” de convertir el tipo de parámetro real al tipo de parámetro formal es el menor.

la intersección de estos dos conjuntos es 1. variable.un ejemplo de una llamada de función ambigua es:

F1 = Add( 3, 6 );

La llamada de función anteriores compilará conjuntos siguientes:

conjunto 1: El candidato funciona argumento de Que Tenga First int

conjunto 2: El candidato funciona argumento de That Has Second int

Variante 2 (int se puede convertir en long mediante una conversión estándar)

Variante 1 (int se puede convertir en long mediante una conversión estándar)

Observe que la intersección entre estos dos conjuntos está vacía.Por consiguiente, el compilador genera un mensaje de error.

Para el argumento correspondiente, una función con argumentos de valor predeterminado de n se trata como n+1separan funciones, cada uno con un número diferente de argumentos.

Los puntos suspensivos (...) actúa como comodín; coincide con cualquier argumento real.Esto puede conducir a muchos conjuntos ambiguos, si no diseña conjuntos sobrecargados de función con extremo cuidado.

[!NOTA]

La ambigüedad de funciones sobrecargadas no se puede determinar hasta que se encuentre una llamada de función.En ese momento, se compilan los conjuntos para cada argumento en la llamada de función, y determinar si existe una sobrecarga inequívoca.Esto significa que las ambigüedades pueden permanecer en el código hasta que se evocadas por una llamada de función determinada.

Vea también

Referencia

La sobrecarga