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
类型,因为它是两个 int
的减法,因此选择以下重载:
int abs(int n);
关于c++ - 无法在abs函数c++中使用字符串长度函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58156421/