c++ - 对函数的调用是模棱两可的,但为什么呢?
问题描述
#include <iostream>
using namespace std;
void x(int a,int b){
cout<<"int int"<<endl;
}
void x(char a,char b){
cout<<"char char"<<endl;
}
int main() {
int a =2;char c ='a';
x(a,c);
return 0;
}
苹果clang编译器中对'x'的调用不明确,为什么?
对于 x(int,int),第一个参数是直接匹配,第二个是 x(char, char) 的提升,据我所知,第一个参数是标准转换,也根据这个答案-> https://stackoverflow.com /a/28184631/13023201
并且提升应该优先于标准转换,然后应该调用 x(int,int)。那为什么会这样暧昧??
解决方案
查看cppreference如何描述重载解析过程:
最佳可行功能
对于每对可行函数 F1 和 F2,从
i
第 - 个参数到i
第 - 个参数的隐式转换序列进行排序以确定哪个更好(除了第一个参数,静态成员函数的隐式对象参数对排行)如果 F1 的所有参数的隐式转换不比F2 的所有参数的隐式转换差,则 F1 被确定为比 F2 更好的函数,并且
...
x(int, int)
是比x(char, char)
第一个参数更好的匹配,因为int
toint
是完全匹配并且int
tochar
是转换。但是对于第二个参数x(int, int)
来说是一个更糟糕的匹配,因为它是一个提升而不是完全匹配。因此,这两个函数都不是比另一个函数更好的匹配,并且无法解决重载问题。
推荐阅读
- graphql - Postman - 使用 GraphQL 上传文件和其他参数
- reactjs - React Native:网格中显示的图像列表的唯一键
- ssh - SSH 进入谷歌云计算引擎
- python - 从数据框创建字典,其中多列的元组作为键,另一列作为值
- elasticsearch - 如何在 elasticsearch 上仅添加新文档或更改的文档?
- python - 在 CMD 或 Powershell 中查看使用 Python 执行的命令的历史记录
- python - 是否有运营商指定索引“不小于0”?
- python - 尝试在 spyder 上使用 GLPK 运行时出错
- r - Is there a way in R / ggplot2 of re-ordering the legend to match it's line position?
- python - Python Luigi:处理缺失依赖的有效方法