sobrecargar - ¿Por qué la sobrecarga de funciones genera un error ambiguo en C++?
sobrecargar== (1)
En los siguientes fragmentos de código, en la llamada a la función f(1) , 1 es un literal de tipo int y en la primera función el tipo de argumento void f(double d) es double y la segunda función void f(short int i) tipo de argumento es short int .
Aquí 1 es un tipo int no un tipo double , entonces ¿Por qué el compilador genera un error ambiguo?
#include <iostream>
using namespace std;
void f(double d) // First function
{
cout<<d<<endl;
}
void f(short int i) // Second function
{
cout<<i<<endl;
}
int main()
{
f(1); // 1 is a literal of type int
return 0;
}
Porque, como señala su comentario, 1 es un literal de tipo int .
Para el compilador, una conversión implícita de int a short int es igual de válida que una conversión implícita de int to double ( véase el estándar de lenguaje C ++, §13.3).
Por lo tanto, dado que el compilador no puede decidir entre las sobrecargas short int double y short int , se da por vencido y emite un diagnóstico.
Tenga en cuenta que la magnitud del parámetro de función no importa: solo el tipo.
(Sería molesto si el compilador eligiera, en tiempo de ejecución, la sobrecarga short int si el argumento de la llamada era apropiado, y el double en otras instancias).