1
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?

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

4

2 回答 2

2

它确实调用void f(double, double = 3.14);了 ,因为第二个参数的默认值;提供一个双倍,一个需要 -> 匹配。否则,void f(int);将被选中。所以重要的是强制参数的数量。

更多信息:

于 2013-11-13T22:21:43.110 回答
1

您已经从函数中定义了第二个值:

void f(double, double = 3.14);

所以打电话

f(5.6);

就好像

f(5.6, 3.14);

使用显式类型转换来调用其他函数,例如:

f((int)5.6);
于 2013-11-13T22:15:33.503 回答