en cuenta lo siguiente:parámetros por defecto en C++
int foo(int x , int z = 0);
int foo(int x, int y , int z = 0);
Si llamo a esta función, así:
foo(1 , 2);
¿Cómo el compilador sabe cuál usar?
en cuenta lo siguiente:parámetros por defecto en C++
int foo(int x , int z = 0);
int foo(int x, int y , int z = 0);
Si llamo a esta función, así:
foo(1 , 2);
¿Cómo el compilador sabe cuál usar?
No lo hará y, por lo tanto, este ejemplo no se compilará limpiamente, le dará un error de compilación.
Le dará un error de llamada de función ambigua.
int foo(int x , int z = 0){return 0;}
int foo(int x, int y , int z = 0){return 10;}
int main()
{
foo(1 , 2);
return 0;
}
Salida:
prog.cpp: In function ‘int main()’:
prog.cpp:6: error: call of overloaded ‘foo(int, int)’ is ambiguous
prog.cpp:1: note: candidates are: int foo(int, int)
prog.cpp:2: note: int foo(int, int, int)
No es así, es por eso que obtiene un error de compilación.
compilador reportar sobrecarga de la función ambigua. Como no se puede determinar qué función se llamará, también lo hace el compilador
Esa es una buena pregunta. Pero no se compilará debido a una llamada ambigua al foo()
. Puede eliminar esta ambigüedad utilizando diferentes tipos de datos en la firma de la función.
Para obtener más detalles acerca de parámetro predeterminado y sobrecarga de funciones ver http://www.smart2help.com/e-books/ticpp-2nd-ed-vol-one/Chapter07.html