函数的匹配:大多数情况下我们容易确定某次调用应该选哪个重载函数,然而当几个重载函数相等以及某些形参类型可以转换得来的时候这项工作就不是那么容易
1、 函数匹配的第一步是选定本次调用对象的重载函数集,集合中的函数被成为候选函数,候选函数右两个特征:1是与被调用的函数同名;2是其声明在函数调用点可见的地方
2、 考察本次调用提供的实参,然后从候选函数中选出能被这组实参调用的函数(这些新选出的函数被称为可行函数):它的两个特征:1、形参的数量与本次调用提供的实参数量相等、;2、每个实参的类型与对应的形参类型相同,或者能转换成形参的类型。
3、 接下来考察实参的类型是否与形参匹配
4、 实参与形参匹配的含义可能是他们具有相同的类型也可能是实参类型和形参类型满足转换规则
5、 从可行函数中选择与本次调用最匹配的函数
6、 逐一检查函数调用提供的实参,寻找形参类型与实参类型最匹配的那个可行函数
7、 实参类型与形参类型越接近他们匹配得越好
8、 精确匹配闭需要类型转换的匹配更好
9、 匹配成功需要一定的条件:该函数每个实参的匹配都不劣于其他可行函数需要的匹配
10、 至少有一个实参的匹配优于其他可行函数的匹配
11、 如果坚持所有实参后没有任何一个函数脱颖而出则该函数调用是错误的(二义性调用错误)。
例子:
//第一个
int fun(int i)
{
renturn i;
}
//第二个
int fun(int i,int h)
{
renturn i;
}
//第三个
int fun(chat i,int h)
{
renturn i;
}
//第四个
int fun(int i,chat h)
{
renturn i;
}
fun(5); //调用成功第一个,1是与被调用的函数同名;2是其声明在函数调用点可见的地方
fun(5,6); //调用成功第二个,1、形参的数量与本次调用提供的实参数量相等、;2、每个实参的类型与对应的形参类型相同,或者能转换成形参的类型。
fun('h',5) //调用成功第三,实参的类型是否与形参匹配
博主QQ交流群:778212048