功能重载分辨率

时间:2013-11-13 22:10:34

标签: c++ function

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?

我读到编译器在检查参数类型之前检查参数的数量。那为什么不能消除所有具有不同参数数量的函数呢?

2 个答案:

答案 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);