如果我们调用一个定义了默认参数的函数,那么我们填写的第一个参数一定是和最左边形参匹配,并且逐渐向后(右)匹配,不可以中途省略某一个参数,直到所有未被设置默认值的形参都已经有参数。
于是,在调用函数时,用户向右自定义的实参至少要和向左来的已定义默认参数的形参相邻,函数才能够被成功调用。否则这个函数就是缺少参数的。
默认参数和重载函数的混淆
我们在上一节讲了重载函数这个有用的工具,这一节的默认参数也会给我们的程序设计带来方便,然而我们把这两样有用的东西放在一起,却会带来不小的麻烦。我们来看下面这些函数原型:int fn(int a);
int fn(int a,int b=2);
int fn(int a,int b=3,int c=4);
这些函数不论是从重载的角度看,还是从默认参数的角度看都是合法的。然而,这样的写法却是不合理的。
当我们调用函数fn(1)的时候,三个函数都是可以匹配的,因为电脑可以认为我们省略了后面的参数;当我们调用函数fn(1,1)的时候,后两个函数也都是可以匹配的……由于电脑无法确认我们到底想要调用哪个函数,所以导致了错误的发生。










