既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
今天学习的内容也比较简单,学习的是函数匹配,不过,学习就是在于日积月累,每天学一点,都是进步。
在大多数情况下,我们容易确定某次调用应该选用哪个重载函数。然而,当几个重载函数的形参数量相等以及某些形参的类型可以由其他类型转换得来时,这项工作就不那么容易了。以下面这组函数及其调用为例:
void f();void f(int);
void f(int, int) ;
void f (double, double = 3.14) ;
f(5.6); //调用void f (double, double)
确定候选函数和可行函数函数匹配有三步:
第一步:是选定本次调用对应的重载函数集,集合中的函数称为候选函数(candidate function)。
候选函数具备两个特征:一是与被调用的函数同名,二是其声明在调用点可见。在这个例子中,有4个名为f的候选函数。
第二步:考察本次调用提供的实参,然后从候选函数中选出能被这组实参调用的函数,这些新选出的函数称为可行函数(viable function)。
可行函数也有两个特征:一是其形参数量与本次调用提供的实参数量相等,二是每个实参的类型与对应的形参类型相同,或者能转换成形参的类型。
**第三步:**是从可行函数中选择与本次调用最匹配的函数(最佳匹配)。在这一过程中,逐检查函数调用提供的实参,寻找形参类型与实参类型最匹配的那个可行函数。
它的基本思想是:实参类型与形参类型越接近,它们匹配得越好。
含有多个形参的函数匹配
当实参的数量有两个或更多时,函数匹配就比较复杂了。对于前面那些名为f的函数,如果是使用(42, 2.56)这样的参数来调用:
此时,可行函数包括f(int, int)和f(double,double)。接下来,编译器依次检查每个实参以确定哪个函数是最佳匹配。如果有且只有个函数满足下列条件,则匹配成功:
.该函数每个实参的匹配都不劣于其他可行函数需要的匹配。
.至少有一个实参的匹配优于其他可行函数提供的匹配。
如果在检查了所有实参之后没有任何一个函数脱颖而出,则该调用是错误的。编译器将报告二义性调用的信息。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
频,并且后续会持续更新**