void f();
void f(int);
void f(int, int);
void f(double, double = 3.14);
f(5.6); // calls void f(double, double) and not f(int) or f(), for that matter. Why?
我读到编译器在检查参数类型之前检查参数的数量。那为什么不能消除所有具有不同参数数量的函数呢?
答案 0 :(得分:2)
它会调用void f(double, double = 3.14);
,因为第二个参数的默认值;提供一个双,一个需要 - >比赛。否则,将选择void f(int);
。因此,重要的强制性参数的数量。
更多信息:
答案 1 :(得分:1)
您已从函数中定义了第二个值:
void f(double, double = 3.14);
所以电话
f(5.6);
就像
f(5.6, 3.14);
使用显式类型转换,调用其他函数,如:
f((int)5.6);