$1 $2
Row::updatePair(int, long long) // #1
Row::updatePair(int, long double) // #2
// updatePair(924, 0.0);
// int -> int (#1) // $1#1
// int -> int (#2) // $1#2
//
// double -> long long // $2#1
// double -> long double // $2#2
在这种情况下,第一组中的两个转换都是完全匹配的,而第二组中的两个转换都是转换。他们的排名相同——就像int -> long
vs int -> double
。另一个调用具有相同的类型,只是值不同,因此表现出相同的行为。
Onlyfloat -> double
是一种提升,就像只有小于 int 到 int 的整数类型(对于一些特殊平台到 unsigned int)是提升。所以以下内容不会有歧义
$1 $2
Row::updatePair(int, double) // #1
Row::updatePair(int, long double) // #2
// updatePair(924, 0.0f);
// int -> int (#1) // $1#1
// int -> int (#2) // $1#2
//
// float -> double // $2#1 (promotion - not a ranked as conversion).
// float -> long double // $2#2
在这种情况下,第二个参数在转换为 的参数时具有更好的转换顺序#1
。