- 找到完全匹配项。
- 已执行不重要的转换。
- 已执行整型提升。
- 已存在到所需参数类型的标准转换。
- 已存在到所需参数类型的用户定义的转换(转换运算符或构造函数)。
-
已找到省略号所表示的参数。
编译器为每个参数创建一组候选函数。候选函数是这样一种函数,其中的实参可以转换为形参的类型。
为每个参数生成一组“最佳匹配函数”,并且所选函数是所有集的交集。如果交集包含多个函数,则重载是不明确的并会生成错误。对于至少一个参数而言,最终选择的函数始终是比组中的所有其他函数更好的匹配项。如果不是这样(如果没有清晰的胜者),则函数调用会生成错误。
考虑下面的声明(针对下面的讨论中的标识,将函数标记为 Variant 1、Variant 2 和 Variant 3):Fraction &Add( Fraction &f, long l ); // Variant 1 Fraction &Add( long l, Fraction &f ); // Variant 2 Fraction &Add( Fraction &f, Fraction &f ); // Variant 3 Fraction F1, F2;请考虑下列语句:
F1 = Add( F2, 23 );前面的语句生成两个集:
集 1:其第一个参数的类型为 Fraction 的候选函数 集 2:其第二个参数可转换为类型 int 的候选函数 Variant 1 Variant 1(可使用标准转换将 int 转换为 long) Variant 3










