函数匹配

在大多数情况下,我们容易确定某次调用应该选用哪个重载函数。

然而当几个重载函数的形参数量相等以及某些形参的类型可以由其它类型转换得来时,这项工作就不那么容易了。

函数匹配的第一步时选定本次调用对应的重载函数集,集合中的函数称为候选函数。其具备两个特征:一是与被调用的函数同名,二是其声明在调用点可见。

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

可行函数有两个特征:一是其形参数量与本次调用提供的实参数量相等,二是每个实参的类型与对应的形参类型相同,或者能转换成形参的类型。

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

当实参的数量有两个或更多时,编译器依次检查每个实参以确定哪个函数是最佳匹配,如果有且只有一个函数满足下列条件,则匹配成功:

该函数每个实参的匹配都不劣于其它可行函数需要的匹配。

至少有一个实参的匹配优于其它可行函数提供的匹配。

为了确定最佳匹配,编译器将实参类型到形参类型的转换划分成几个等级:

精确匹配

如果重载函数的区别在于它们的饮用类型的形参是否饮用了const ,或者指针类型的形参是否指向 const ,则当调用发生时编译器通过实参是否是常量来决定选择哪个函数。


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 函数匹配 确定候选函数和可行函数 第一步:选定本次调用对应的重载函数集,集合中的函数称为候选函数candidate...
    Kreat阅读 481评论 0 0
  • 函数是一个命了名的代码块,我们通过调用函数执行相应的代码。函数可以有零个或者多个参数,而且(通常)会产生一个结果。...
    丶不霁何虹阅读 1,177评论 0 1
  • 6.1 函数基础 函数(function) :是一个命名的代码块,我们可以通过调用函数来执行其中的代码。 函数的定...
    卖渔翁阅读 989评论 0 0
  • #1.函数基础1.1 局部对象1.2 函数声明1.3 分离式编译 #2.参数传递2.1 传值参数2.2 传引用参数...
    MrDecoder阅读 625评论 0 1
  • 距离上次更新又过了一周,又该更新新的读书笔记了。本次更新的主要是c++中函数部分的内容c++ 中的函数与c语言中的...
    一叶障目阅读 178评论 0 0