函数重载的输出不符合预期 我正在学习C++中函数重载,我对函数匹配有疑问。按照我得到的代码运行 错误C2668:“函数”:对重载函数的调用不明确我出错的原因在本文中得到了明确的回答。 数字1.2和2.2是类型double。 当我尝试调用函数(1.2,2)或函数(1,2.2)时,它打印为“int function”。为什么它不给出与上面相同的错误
代码:函数重载的输出不符合预期 我正在学习C++中函数重载,我对函数匹配有疑问。按照我得到的代码运行 错误C2668:“函数”:对重载函数的调用不明确我出错的原因在本文中得到了明确的回答。 数字1.2和2.2是类型double。 当我尝试调用函数(1.2,2)或函数(1,2.2)时,它打印为“int function”。为什么它不给出与上面相同的错误,c++,function,overloading,C++,Function,Overloading,代码: void function(int y,int w) { printf("int function"); } void function(float y,float w) { printf("float function"); } int main() { function(1.2,2.2); return 0; } 当我尝试调用函数(1.2,2)或函数(1,2.2)时,它会打印为“int function”。
void function(int y,int w)
{
printf("int function");
}
void function(float y,float w)
{
printf("float function");
}
int main()
{
function(1.2,2.2);
return 0;
}
当我尝试调用函数(1.2,2)
或函数(1,2.2)
时,它会打印为“int function”。为什么它不给出与上面相同的错误
因为根据void函数(inty,intw)的规则
比void函数(float y,float w)
更匹配,因此没有歧义
调用
function(1.2,2)
和function(1,2.2)
都有一个参数是int
,并且与void function(int y,int w)
的一个参数完全匹配,因此只需要一个类型转换,double
到int
void函数(float y,float w)
另一方面需要两次转换int
到float
和double
到float
,这就是为什么使用int
重载。@πῥεῖ: 他提供了一个MCVE,就在链接处。建议重新打开。@YePhIcK:你注意到他的链接了吗?它有所有必要的上下文。@einpoklum来吧,这远远不是@einpoklum问题必须是独立的。这意味着代码必须在问题中,而不是链接。我建议您阅读本文,并了解其中的原因。当您使用int-literal时,编译器可以找到只需要一次转换而不是两次转换的候选函数。一场更好的比赛,他们中只有一个。因此,对于哪一个更好,它不再含糊其辞,它很乐意将double强制为int。