【发布时间】:2018-11-25 08:16:22
【问题描述】:
我正在学习 C++ 中的函数重载,我对函数匹配有疑问。在我得到的代码下面运行
error C2668: 'function' : ambiguous call to overloaded function.
link 清楚地回答了我出错的原因。
数字 1.2 和 2.2 是类型double。尽管我还有一个疑问,但在那里没有得到回答。
当我尝试调用 function(1.2,2) 或 function(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;
}
【问题讨论】:
-
@πάνταῥεῖ:他已经提供了一个 MCVE,它就在链接上。建议重新开放。
-
@YePhIcK:你关注他的链接了吗?它具有所有必要的上下文恕我直言。
-
@einpoklum 来吧,这与minimal reproducible example 相差甚远
-
@einpoklum 一个问题必须独立。这意味着代码必须在问题中,而不是链接。我建议阅读How to Ask 并查看关闭的原因。
-
当您使用 int 字面量时,编译器可以找到只需要一次转换而不是两次转换的候选函数。更好的匹配,只有其中一个。因此,对于哪个更好,不再有歧义,并且很乐意将 double 强制转换为 int。
标签: c++ function overloading