重载功能.为什么这里含糊不清?

Fel*_*ein 7 c++

我在下面的代码中重载了我的函数:

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 )过载.