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

问题描述 投票:0回答:1
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++
1个回答
1
投票

写时:

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);
© www.soinside.com 2019 - 2024. All rights reserved.