无法在 abs 函数 c++ 中使用字符串长度函数

Not able to use string length function in abs function c++

本文关键字:函数 字符串 c++ abs      更新时间:2023-10-16
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());
}

我有点困惑,我无法abs()函数中调用字符串length()函数。当我将字符串length()函数的结果放在整数数据类型中时,没有错误。

当我在abs()中调用字符串length()函数时,错误是这样的。

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,因为它是两个ints 的减法,因此选择以下重载:

int           abs(int n);