默认形参重载,注意避免二义性
对于有默认形参的函数重载形式时,需要注意避免二义性:
void fun(int a,int b = 2,int c = 3);
void fun(int a)
这样的两个函数原型,在编译的时候编译器就没法区别成不同的函数重载形式了。我们可以这样理解:对于这两个函数,现在我们要进行如下调用:
fun(1);
那么我们该调用哪一个呢?因为第一个函数的另外两个参数都有默认值,所以fun(1);
既可以被当成第一个函数,也可以被当成第二个函数——这就产生了二义性。所以,在定义重载函数的时候,我们应当避免这种情况的发生。