在大多数情况下,我们容易确定某次调用应该选用哪个重载函数。
然而当几个重载函数的形参数量相等以及某些形参的类型可以由其它类型转换得来时,这项工作就不那么容易了。
函数匹配的第一步时选定本次调用对应的重载函数集,集合中的函数称为候选函数。其具备两个特征:一是与被调用的函数同名,二是其声明在调用点可见。
第二步参考调用时提供的实参,然后从候选函数中选出能被这组实参调用的函数,这些新选出的函数称为可行函数。
可行函数有两个特征:一是其形参数量与本次调用提供的实参数量相等,二是每个实参的类型与对应的形参类型相同,或者能转换成形参的类型。
函数匹配的第三步是从可行函数中选择与本次调用最匹配的函数。在这一过程中,逐一检查函数调用提供的实参,寻找形参类型与实参类型最匹配的那个可行函数。
当实参的数量有两个或更多时,编译器依次检查每个实参以确定哪个函数是最佳匹配,如果有且只有一个函数满足下列条件,则匹配成功:
该函数每个实参的匹配都不劣于其它可行函数需要的匹配。
至少有一个实参的匹配优于其它可行函数提供的匹配。
为了确定最佳匹配,编译器将实参类型到形参类型的转换划分成几个等级:
精确匹配
如果重载函数的区别在于它们的饮用类型的形参是否饮用了const ,或者指针类型的形参是否指向 const ,则当调用发生时编译器通过实参是否是常量来决定选择哪个函数。