int add(int a,int b)
{
cout<<"1"<<endl;
return a+b;
}
int add(int a,char c)
{
cout<<"2"<<endl;
return a+c;
}
int main()
{
cout<<add(10,20)<<endl; //1
cout<<add(10,'a')<<endl; //2
cout<<add('a','b')<<endl; //3
}
在上面的代码中第一个函数调用函数add(int,int),第二个函数调用函数add(int,char)。 第三个函数调用应该导致错误,但它调用函数add(int,char)。 任何人都可以解释原因。
答案 0 :(得分:5)
答案 1 :(得分:1)
如果一个函数的所有参数转换至少与另一个函数的参数转换,并且某些参数转换得更好,则采用该函数。
如果并非所有参数都至少与另一个函数的参数转换,并且后一个函数的所有参数都不能转换为前一个函数的参数,那么普通情况下的普通情况就会出现歧义。功能
答案 2 :(得分:0)
最接近的匹配是具有int和char的匹配。由于char可以隐式转换为int,因此它仍然有效。
int a = 'a'; // Returns the ascii value for 'a'.