El siguiente es bien
void function(int a = 0, float b = 3.1);
void function(int a, float b =1.1, int c = 0);
Y la siguiente es bien también
function(); // calls first function
Sin embargo, el siguiente es ambigua
function(1); // second and first match equally well
Para la resolución de sobrecarga (el proceso que dice lo función para llamar), parámetros que no han pasado argumentos explícitos y que hacen uso de defau Sus argumentos son ignorados. Entonces el compilador realmente ve dos funciones que tienen un parámetro int para la llamada anterior y no pueden decidir.
El siguiente es mal formada, aunque
void function(int a = 0, float b = 3.1);
void function(int a, float b =1.1);
Mientras que para el código en su pregunta que declarar dos funciones (ya que ambas declaraciones tienen diferente número de parámetros), en este ejemplo solamente se declara uno función. Pero la segunda declaración repite un argumento predeterminado para un parámetro (e incluso con un valor diferente, pero eso ya no importa). Esto no esta permitido. Tenga en cuenta que la siguiente es bien
void function(int a, float b = 3.1);
void function(int a = 0, float b);
El conjunto de argumentos por defecto para las declaraciones que aparecen en el mismo ámbito para la misma función se fusionan, y sólo para los que aparecen en el mismo ámbito. Así que la siguiente es válida
void function(int a = 0, float b = 3.1);
void function1() {
void function(int a, float b = 1.1);
function(0);
}
Este llama a la función con 1.1
pasado por b
.
Sus funciones tienen diferentes identificadores. No hay ambigüedad ¿Querías nombrarlos a los dos 'función'? – JoshD
@JoshD: poco probable. El primero tiene 2 parámetros, el segundo - 3. – AnT
@Andrey: La pregunta no tiene sentido a menos que * hay * una ambigüedad, por lo que el comentario de Josh es apropiado. – dmckee