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

标签 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());
}

我有点困惑,我无法在 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/

相关文章:

c++ - 从自引用对象的二进制文件 C++ 在内存中创建链表

c++ - 加载带有预排序数据的 STL 集,C++

c++ - 如果所有线程都写入不同的位置,多个线程可以同时写入文件吗?

c++ - 在 Ubuntu Linux 上使用 Kinect 编程

c++ - 使用 Qt/bash 脚本与 Web 浏览器交互?

c++ - Vector<Vec3b> 与 Vector<int> 在 OpenCV 中的区别

c++ - 如何制作类似类的 "variadic" vector

c++ - 抛出一个右值

c++ - std is_member_function_pointer 中的模板类型

c++ - 我可以从函数返回 CRecordset 对象吗?