我不明白编译器如何选择最佳候选者。
例如,我们有以下代码:
int function(double, int, int){...}
int function(int, double, double){...}
如果第二个函数需要转换两个变量,而第一个函数只需要转换一个变量,为什么不选择第一个呢?
为什么这是一个模棱两可的情况?
为什么这是一个模棱两可的情况?
根据§13.3.3/1,
给定这些定义,一个可行的函数F1
被定义为better函数比另一个可行的函数F2
如果对于所有参数i, ICS i (F1
) 的转换序列并不比
工业控制系统i (F2
), 进而
——对于一些争论j, ICS j (F1
) 是一个更好的转换
顺序比 ICSj (F2
),或者,如果不是这样,
— [...]
因此像这样的调用function(0., 0., 0.)
是不明确的;两种重载都不比另一种更匹配。
考虑从函数调用中推导模板参数 - 如果模板参数T
用于多个函数参数(例如T a, T b, T c
)并且对于调用的两个参数,它被推导为int
,但对于第三个double
,这是否真的会导致成功的推论T=int
?
过载决议不会计算更好的比赛并判定获胜者 - 这不够具有决定性。
想象一下拼图游戏 - 如果一块拼图两端的填充效果更好,而另一端的填充效果更差,那么它真的更适合间隙吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)