call function 1
通过算术类型转换实现的匹配
short int和float,double等之间的转换,都是算术类型之间的转换。我们仍然来看一个例子:
#include <iostream>
using namespace std;
//函数1
int f(int a)
{
cout<<"call function 1"<<endl;
return 0;
}
//函数2
int f(double a)
{
cout<<"call function 2"<<endl;
return 0;
}
int main()
{
short a = 2;
f(a);
return 0;
}
在这里,short类型的a既可以通过类型提升转换为int,也可以通过算术类型转换成为double。这个时候,哪个才是最佳匹配呢?我们看运行结果:
call function 1
对于这个结果,并不意外,因为前面我们已经说到,通过类型提升的转换是优于算术转换的,因而函数1是它的最佳匹配函数。
通过类类型转换实现的匹配
这里不多做介绍。我们也很容易理解。诸如父类和子类之间的转换都是如此。
二义性示例
前面基本能够找到最佳匹配,我们来看一个有多个可行函数,最后却没有最佳匹配的情况。










