为什么这是一个错误: 即。不是长而长的双重不同类型?
../src/qry.cpp", line 5360:
Error: Overloading ambiguity between "Row::updatePair(int, long long)"
and "Row::updatePair(int, long double)".
致电代码: 。 。 pRow - > updatePair(924,0.0); pRow - > updatePair(925,0.0);
答案 0 :(得分:3)
常量0.0
的类型为double,与您的重载函数不直接匹配。您可能希望编译器选择long double
版本,但编译器不希望为您做出这样的假设。
您需要更明确地说明您希望编译器调用哪个版本:
pRow -> updatePair(924, 0.0L);
将调用long double
版本。
或:
pRow -> updatePair(924, 0LL);
将调用long long
版本。
答案 1 :(得分:1)
$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
。另一个调用具有相同的类型,只是不同的值,因此它表现出相同的行为。
只有float -> 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
参数时具有更好的转换顺序。