void f(const string& a,const string& b){
// works
int lena = a.length();
int lenb = b.length();
return abs(lena-lenb);
// does not work
return abs(a.length()-b.length());
}
我有点困惑,我无法在length()
函数中调用字符串abs()
函数。当将字符串length()
函数的结果放入整数数据类型时,没有错误。
当我在length()
中调用字符串abs()
函数时,错误是这个。
error: call of overloaded
abs(std::__cxx11::basic_string<char>::size_type) is ambiguous
abs(a.length()-b.length);
写时:
a.length()-b.length()
由于std::size_t
的返回类型也是std::string::length()
,结果最终也具有std::size_t
类型。
当使用这种类型调用std::abs
时,编译器必须选择以下重载之一:
int abs(int n);
long abs(long n);
long long abs(long long n);
std::intmax_t abs(std::intmax_t n);
并且在该语言中,没有规则可以将无符号整数提升/转换为特定的带符号整数,这意味着编译器无法为您选择。
但是,当您通过以下方式致电时:
lena-lenb
具有类型int
,因为它是两个int
的减法,因此选择了以下重载:
int abs(int n);