赞
踩
目录
c++在声明函数原型的时候可以为一个或者多个参数指定默认(缺省)的参数值,当函数调用的时候如果没有指定这个值,编译器会自动用默认值代替。
代码示例:
- //函数的默认参数,指定x默认值为10,y默认值为20
- int add(int x = 10, int y = 20) {
- return x + y;
- }
- void test() {
- cout << "x+y=" << add(100,200) << endl;//输出200
-
- cout << "x+y=" << add(100) << endl;//输出120
-
- cout << "x+y=" << add() << endl;//30
- }
- int main() {
- test();
- }
运行结果:
总结:
1)、当给函数的参数指定默认值时,在调用函数的时候,如果传入实参,那么各自的默认参数将无效。
2)、如果调用函数的时候,若果某个参数未被传参,没有被传参的参数编译器将调用其默认值。
3)、如果调用函数的时候,所有参数都未被传参,编译器自动调用参数默认值。
注意点:
1、函数的默认参数从左向右,如果一个参数设置了默认参数,那么这个参数之后的参数都必须设置默认参数。
- //函数的默认参数从左向右
- //int func(int x,int y=20,int z) {
- // err 只要有一个参数赋于默认值,那么右边的剩下参数都要赋于默认值
- // return x + y + z;
- //}
- int func(int x,int y=20,int z=100) {
-
- return x + y + z;
- }
- void test() {
- cout << "func=" << func(100,200)<<endl;
- cout << "func=" << func(100)<<endl;//220
- cout << "func=" << func()<<endl;//err 因为x没有默认值,这样会报缺少参数的错
- }
- int main() {
- test();
- }
运行结果:
2、如果函数声明和函数定义分开写,函数声明和函数定义不能同时设置默认参数。(建议函数声明处设置参数)
代码示例:
main.c:
- int func(int x, int y = 20, int z = 100) {
- return x + y + z;
- }
test.c:
- //函数声明
- extern int func(int x, int y = 30,int z=200);
-
- void test() {
- cout << "func=" << func(100, 100) << endl;
- }
- int main() {
- test();
- }
运行结果:
总结:从上面代码运行结果可以看出来,最终的结果是编译器调用函数声明处指定的默认值,而不是函数定义时参数的默认值。因此呢一般在函数声明处设置缺省参数。
注意:分文件时,函数定义处的默认参数是无效的,例如在上面main.c中函数中参数的值是无效的,当分文件时,在函数声明处给默认参数。
c++中,函数的参数只有类型名,没有形参名,这参数就是占位参数。由于有类型名,所以函数调用的时候必须给占位参数传参。由于没有形参名,所以函数内部是无法使用占位参数。
- void func(int x,int y,int) {
- cout << "x=" << x << ",y=" << y << endl;
- }
- void test() {
- func(10,20,30);
- //func(10, 20, "cccc");err "cccc"与int类型不符
- }
- int main() {
- test();
- }
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。