默认形参重载,注意避免二义性

对于有默认形参的函数重载形式时,需要注意避免二义性:

void fun(int a,int b = 2,int c = 3);

void fun(int a)

这样的两个函数原型,在编译的时候编译器就没法区别成不同的函数重载形式了。我们可以这样理解:对于这两个函数,现在我们要进行如下调用:

fun(1);

那么我们该调用哪一个呢?因为第一个函数的另外两个参数都有默认值,所以fun(1);既可以被当成第一个函数,也可以被当成第二个函数——这就产生了二义性。所以,在定义重载函数的时候,我们应当避免这种情况的发生。