也就是在a.h中,需要有这样的声明:
void f(int x , int y = 0);
然后在a.cc中,不要有默认参数的声明。
void f(int x, int y){}
这样子。不能两处同时写默认参数。
因为默认参数是给调用者看的,所以放在头文件中。
而如果放在cpp文件中,头文件中没有的话,调用的时候就会出现问题。提示缺少参数。
原理:
默认参数这个机制,是编译时刻生效的。编译器在声明中找到那个默认的参数,然后偷偷的补上了那个值。
default value不安全,尽量不要用。很容易被人修改默认的值。