Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
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?
我读到编译器会在检查参数类型之前检查参数的数量。那么为什么不是所有具有不同数量参数的函数都被消除了呢?
它确实调用void f(double, double = 3.14);了 ,因为第二个参数的默认值;提供一个双倍,一个需要 -> 匹配。否则,void f(int);将被选中。所以重要的是强制参数的数量。
void f(double, double = 3.14);
void f(int);
更多信息:
您已经从函数中定义了第二个值:
所以打电话
f(5.6);
就好像
f(5.6, 3.14);
使用显式类型转换来调用其他函数,例如:
f((int)5.6);