深度探究C++中的函数重载的用法

2020-01-06 14:34:16王冬梅

集 2 中的函数是具有从实参类型到形参类型的隐式转换的函数,在这些函数中,有一种函数的从实参类型到其形参类型的转换的“成本”是最低的。
这两个集的交集为 Variant 1。不明确的函数调用的示例为:

 


F1 = Add( 3, 6 );

前面的函数调用生成以下集:

集 1:其第一个参数的类型为 int 的候选函数 集 2:其第二个参数的类型为 int 的候选函数
Variant 2(可使用标准转换将 int 转换为 long) Variant 1(可使用标准转换将 int 转换为 long)

请注意,这两个集之间的交集为空。因此,编译器会生成错误消息。
对于参数匹配,具有 n 个默认参数的函数将视为 n+1 个单独函数,并且每个函数均具有不同数量的参数。
省略号 (...) 用作通配符;它与任何实参匹配。如果您未极其谨慎地设计重载函数集,这可能导致产生许多不明确的集。
注意
重载函数的多义性无法确定,直到遇到函数调用。此时,将为函数调用中的每个参数生成集,并且可以确定是否存在明确的重载。这意味着,多义性可保持在您的代码中,直到它们由特定函数调用引发。
参数类型差异