模棱两可的调用错误是它不知道要调用哪个函数,而不是它没有隐式转换。
看看以下。如果我创建自己的函数,它接受一个双精度并返回一个双精度,那么隐式转换就没有问题。由于您的整数可以转换为三个重载中的任何一个,因此它不知道要调用什么。
double mysqrt(double d)
{
return d;
}
using namespace std;
int main(int argc, char ** argv)
{
int k;
for(k = 1; k <= 10; k++)
cout << "The square root of k is: " << mysqrt(k) << endl;
return 0;
}//Works Fine
但是,如果我添加另一个带有浮点数的 mysqrt 版本,我会创建一个模棱两可的调用错误。
double mysqrt(float f)
{
return f;
}
double mysqrt(double d)
{
return d;
}
using namespace std;
int main(int argc, char ** argv)
{
int k;
for(k = 1; k <= 10; k++)
cout << "The square root of k is: " << mysqrt(k) << endl;
return 0;
}//error C2668: 'mysqrt' : ambiguous call to overloaded function