函数匹配

 几个重载函数的形参数量相等以及某些参数的类型可以由其他类型转换得来时:

void f();
void f(int);
void f(int, int);
void f(double, double = 3.14);
f(5.6);//调用void f(double, double)

确定候选函数和可行函数

第一步选定本次调用对应的重载函数集,集合中的函数称为候选函数

候选函数特征:

  • 与被调用的函数同名
  • 声明在调用点可见

第二步考察本次调用提供的实参,然后从候选函数中选出能被这组实参调用的函数,这些新选出的函数称为可行函数

可行函数的特征:

  • 形参数量与本次调用提供的实参数量相等
  • 每个实参类型与对应的形参类型相同,或者能转换成形参的类型

寻找最佳匹配(如果有的话)

第三步是从可行函数中选择与本次调用最匹配的函数。在这过程中,逐一检查函数调用提供的实参,寻找形参类型与实参类型最匹配的那个可行函数。

含有多个形参的函数匹配

编译器选择那些形参数量满足要求且实参类型和形参类型能够匹配的函数。接下来,编译器依次检查每个实参以确定哪个函数是最佳匹配。如果有且只有一个函数满足下列条件匹配成功:

  • 该函数每个实参的匹配都不劣于其他可行函数需要的匹配。
  • 至少有一个实验的匹配优于其他可行函数提供的匹配。

如果在检查了所有实参之后没有任何一个函数脱颖而出,则该调用是错误的。编译器将报告二义性调用的信息。

Note:调用重载函数时应尽量避免强制类型转换。

posted @ 2019-07-23 12:03  CodeWithMe  阅读(247)  评论(0)    收藏  举报