学习《C++ Primer》一书中,函数匹配这一节内容信息较多,现截取重点内容记录于此。便于你对本文内容更好的理解,你需对类型提升、算术类型转换以及顶层cosnt,底层const有一定的了解。
多数情况下,我们可以很容易的判断出该会调用哪一个重载函数,例如,调用的重载函数之间形参数量不同,形参的类型有明显的区别等。但是,当几个重载函数形参数量相等、具有默认形参以及形参又可以发生类型转换时,判断会调用哪个重载函数就显得不那么明了。了解重载函数的调用规则有助于我们的判断。
函数匹配可以划分为三个步骤,分别为:选定候选函数,选定可行函数,寻找最佳匹配。以下面的一组重载函数为例:
void f();
void f(int);
void f(int,int);
void f(double,double = 3.14);
f(3.14); //调用 void f(double,double = 3.14)
f(10,20); //调用 void f(int,int)
f(10,3.14); //错误,二义性调用
一、候选函数
函数匹配的第一步是选定本次调用对应的重载函数集,集合中的函数称为候选函数。候选函数具备两个特征:一是与被调用的函数同名,二是其声明在调用点可见。