C++默认参数的问题~

“默认实参必须是函数参数表中最右边(尾部)的参数
调用具有两个或多个默认实参数的函数时,如果省略的不是参数表中最右边的参数,则该参数右边的所有参数也应省略
默认实参应在函数名第一次出现时指定,通常是在函数原型中”
这段话我不太明白。默认实参为什么是最右边的数这个是啥意思啊
以及后面的我也不太清楚。。。

比如说下面的函数
int fun(int a,int b,int c=3)
{

}
c就是指定的默认实参,通常在函数原型中指定。这里给了3作为默认参数。用平常的时候调用这个函数fun(4,5,6);那么就是a=4,b=4,c=6。如果这样调用fun(1,2)那么就是a=1,b=2,c=3,这里c没有指定,因为c是默认实参,已经有了默认值,这里c就是采用默认值3。
为什么默认实参必须是函数参数表中最右边的参数。把上面的函数改下
int fun(int a=3,int b,int c)
{}
这样调用fun(1,2),这样就是a=1,b=2,而c根本就没有赋到值,就出错了。这些参数都是一一对应的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-30
比如一个函数声明void f(type p1, type p2, type p3, type p4)
如果要使用默认参数可以声明成void f(type p1, type p2, type p3, type p4=default)
或者void f(type p1, type p2, type p3=default, type p4=default)
以及void f(type p1, type p2=default, type p3=default, type p4=default)
和void f(type p1=default, type p2=default, type p3=default, type p4=default)
但不能声明成void f(type p1, type p2, type p3=default, type p4)
原因在于:默认参数是可以省略的,所以如果你传入三个参数,编译器不知道这到底是省略了一个参数,还是某种错误,所以要求所有默认参数必须都要靠右,且在第一个默认参数之后如果还有参数,必须都是默认参数。
在调用时一旦一个默认参数被省略,则其之后的所有参数都必须省略,否则会造成编译系统的混乱,从而造成错误的调用
第2个回答  2011-06-30
定义函数 void f(int q, int w, int e=0);
e=0 就是默认实参,调用函数时f(1,2),这时e=0
后面的是说不能写成这样 void f( int q, in w=0, int e);
相似回答