#include <iostream>
#include <cmath>
using namespace std;
float f (int a, int b) {
return (a + b);
}
float f (float a, float b) {
return (round(a + b));
}
int main()
{
cout << "Hello World!" << endl;
int int1 = 1;
int int2 = 2;
float float1 = 1.2f;
float float2 = 1.4f;
cout << f(int1, int2) << endl; // output: 3
cout << f(float1, float2) << endl; // output: 2
cout << f(int1, float2) << endl; // output: 2
return 0;
}
Почему последний выход использует второе определение
f
?Как определить, какая перегруженная функция называется?В целом, как определить, какое перегруженное определение функции будет использоваться, когда точное определение количества и типов аргументов между определениями функций и вызовом функции не выполняется?
Я думаю, что вы имели в виду: 'float float1 = 1.2;' и 'float float2 = 1.4;' – Mysticial
Мой прямой ответ будет заключаться в том, что 'int -> float' является лучшим преобразованием, чем' float -> int'. Интересно, что мне не удалось найти цитату в стандарте, где это указано. –
Какой компилятор/версия вы используете? После проверки стандарта я считаю, что код должен вызывать ошибку, поскольку вызов 'f (int1, float2)' is * неоднозначный *. GCC и Clang согласны. –