首页 > 解决方案 > 无法在abs函数c ++中使用字符串长度函数

问题描述

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);

标签: c++

解决方案


当你写:

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);

推荐阅读