C++深入学习之彻底理清重载函数匹配

2020-01-06 20:16:34于丽

前言

前面我们讲到了《函数重载》,有了函数重载之后,就需要确定某次调用需要选用哪个函数。这个过程可以称之为函数匹配或者重载确定。大多数情况下,我们都很容易能够确定某次调用需要选用哪个函数,但事实上不尽然。但通过本文将彻底理清重载函数匹配

匹配过程

为便于说明,将函数匹配分为三个阶段,确定候选函数,确定可行函数,确定最佳匹配函数。

确定候选函数

候选函数也就是和被调用的函数同名,并且其声明在调用点可见。举个简单的例子。

假设有两个文件,1.cpp和2.cpp,内容分别如下:

1.cpp:


//函数1
 void f(int a,short b)
 {
 cout<<"func0"<<endl;
 }

2.cpp:


#include<iostream>
 using namespace std;
 //函数2
 void f(int a,double b)
 {
 cout<<"func1"<<endl;
 }
 //函数3
void f(int a, int b)
 {
 cout<< "func2"<<endl;
 }
 //函数4
 void f1()
 {
 cout<<"func3"<<endl;
 }
 int main()
 {
 f(3,4.5);
 return 0;
 }

在这里,候选函数其实只有两个,其中第一个函数在其调用点不可见,而第四个函数和被调用的函数不同名,因此这两个都不是候选函数。

确定可行函数