我在下面的代码中重载了我的函数:
void function(char x, double y) {
cout << "char, double" << endl;
}
void function(int x, int y) {
cout << "int, int" << endl;
}
int main() {
function('a', 'b');
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我说:"[警告] ISO C++说这些是模糊的,即使第一次转换的最差转换比第二次转换的最差转换"
编译器如何在此处进行隐式转换,以使哪个候选者是对的模糊不清?
Cli*_*ord 10
文字常量'a'和'b'类型char,所以没有完全匹配.出现歧义的原因是第一个参数与第一个函数匹配,但第二个参数的首选转换是int匹配第二个函数.
GCC对此非常明确,发布以下诊断:
警告:ISO C++说这些是模棱两可的,即使第一个的最差转换比第二个的最差转换更好
GCC似乎在说,我可以为你解决这个问题,但ISO C++不会允许它.但是,类型协议对于良好的代码质量和避免错误很重要.
您可以通过强制转换来强制选择:
function( static_cast<int>('a'), static_cast<int>('b') );
Run Code Online (Sandbox Code Playgroud)
或者提供function( char, char )过载.