如果一个函数中有多个默认参数,则默认参数必须全部处在形参表的?
2个回答
展开全部
答案:后面
解释:编译器是按顺序来传参数的。详解如下:
1. 例如void fun(int a, int b, int c=0);那么编译器就按照a,b,c的顺序给函数fun传参数,fun函数里c是默认参数,就是说,调用fun函数时,可以不必传3个参数,可以写成fun(1,2),这样的话,a=1,b=2,c=0.
2. 如果默认参数不是在后面部分,而是在前面的话,编译器就会报错,譬如:void f(int a, int b=0, int c);这样的话,默认参数是没有任何意义的,因为你写f(1,2)的时候,编译器是把1赋值给a,2赋值给b,结果c没有赋值,故出错。
总结:为了避免出现上述的第2种情况,编译器只要检查到默认参数后面,还有非默认参数,就会报错。所以说,一个函数如果有默认参数,那么默认参数一定都放在参数列表中的后面部分,否则,编译器报错。
解释:编译器是按顺序来传参数的。详解如下:
1. 例如void fun(int a, int b, int c=0);那么编译器就按照a,b,c的顺序给函数fun传参数,fun函数里c是默认参数,就是说,调用fun函数时,可以不必传3个参数,可以写成fun(1,2),这样的话,a=1,b=2,c=0.
2. 如果默认参数不是在后面部分,而是在前面的话,编译器就会报错,譬如:void f(int a, int b=0, int c);这样的话,默认参数是没有任何意义的,因为你写f(1,2)的时候,编译器是把1赋值给a,2赋值给b,结果c没有赋值,故出错。
总结:为了避免出现上述的第2种情况,编译器只要检查到默认参数后面,还有非默认参数,就会报错。所以说,一个函数如果有默认参数,那么默认参数一定都放在参数列表中的后面部分,否则,编译器报错。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询