函数重载的匹配方式

一、确定候选函数

候选函数需满足:

  1. 和被调用的函数同名。
  2. 其声明在调用点可见。

二、确定可行函数

可行函数指的是本次调用传入的实参能够被候选函数使用。需满足:

  1. 形参和实参数相同。
  2. 每个实参的类型和对应形参类型相同或者能够转换成形参的类型。

三、确定最佳匹配函数

最佳匹配的函数就是最终调用的函数。最佳匹配最基本的思想是认为,实参类型越接近,它们就越匹配。需满足

  1. 其每个实参匹配都不劣于其他可行函数需要的匹配。
  2. 至少有一个实参的匹配优于其他可行函数的匹配。

1.最佳匹配原则

最佳匹配优先级按以下顺序:

  1. 精确匹配,包括实参类型和形参类型相同,实参从数组或函数转换成对应的指针类型,向实参添加顶层const或从实参删除顶层const。
  2. const转换,指的是通过加const限定词,能够与可行函数精确匹配。
  3. 类型提升,简单说明类型提升规则:float将提升到double;char、short和相应的signed、unsigned类型将提升到int。
  4. 算数类型转换(标准转换),short int和float,double等之间的转换,都是算术类型之间的转换。
  5. 类类型转换,如父子类之间的转换。

2.二义性

当匹配的函数有多个可行性函数,但却不满足最佳匹配原则,会产生二义性

四、注意

  1. 调用重载函数时,应当避免强制类型转换。