第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);