#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
の2番目の定義を使用していますか?どのオーバーロードされた関数が呼び出されているかを調べる方法は?一般に、関数定義と関数呼び出しの間の引数の数と型が完全に一致しない場合、どのオーバーロードされた関数定義を使用するかを決定する方法はありますか?
私はあなたが意味すると思う: 'float float1 = 1.2;'と 'float float2 = 1.4;' – Mysticial
私のまっすぐな答えは 'int - > float'は' float - > int'よりも優れた変換です。興味深いことに、これが記載されている標準で見積もりが見つかりませんでした。 –
あなたはどのコンパイラ/バージョンを使用していますか?標準を検証した後、 'f(int1、float2)'が* ambiguous *であるため、コードでエラーが発生するはずです。 GCCとClangは同意します。 –