Rit*_*uly 4 c++ overloading ambiguity clang
#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;
}
Run Code Online (Sandbox Code Playgroud)
在 apple clang 编译器中对“x”的调用不明确,为什么?
对于 x(int,int),第一个参数是直接匹配,第二个是对 x(char, char) 的提升,第一个参数是我知道的标准转换,也根据这个答案-> https://stackoverflow.com /a/28184631/13023201
并且提升应该优先于 std 转换,然后应该调用 x(int,int) 。那为什么会这么暧昧呢??
查看cppreference如何描述重载解析过程:
最佳可行功能
对于每对可行函数 F1 和 F2,从第
i-th 个参数到i第 -th 个参数的隐式转换序列进行排序以确定哪个更好(除了第一个参数,静态成员函数的隐式对象参数对排行)如果 F1 的所有参数的隐式转换不比 F2 的所有参数的隐式转换差,则确定 F1 是比 F2 更好的函数,并且
...
x(int, int)是比x(char, char)第一个参数更好的匹配,因为inttoint是精确匹配而inttochar是转换。但是对于第二个参数来说x(int, int)是一个更糟糕的匹配,因为它是一个提升而不是一个完全匹配。所以这两个函数都不比另一个更好,并且无法解决重载。
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |