unarios sobrecargar sobrecarga significado sencillos operadores matrices ejemplos definicion c++ c++14 function-overloading short ambiguous

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).