c++ - 无法在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);
解决方案
当你写:
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
s 的减法,所以选择以下重载:
int abs(int n);
推荐阅读
- android - 安卓。视图在 FrameLayout 中没有重叠
- python - 如何以快速的方式将列除以熊猫中的其他列?
- php - 如何组织一个包含英语和希伯来语的句子?
- javascript - nuxt vue-router 在 api 调用之前工作,但在 api 响应正文中不工作
- python - 读取文件夹中的特定 CSV 文件?
- c - 读取未初始化的值是否总是未定义的行为?还是有例外?
- reactjs - 如何在 React Native 中实现垂直步进?
- jquery - jQuery在提交之前将数据数组添加到表单
- jquery - Parsley 验证没有必需属性的复选框,但无法验证具有
- javascript - 有没有办法在命令中包含空格?不和谐.js