默认参数

- 思想:
一般情况下,函数调用时实参个数应与形参相同,但为了更方便地使用函数,C++也允许定义具有默认参数的函数,这种函数调用时实参个数可以与形参不相同。“默认参数”指在定义或声明函数时为形参指定默认值(default)。这样的函数在调用时,对于默认参数,可以给出实参值,也可以不给出实参值。如果给出实参,将实参传递给形参进行调用,如果不给出实参,则按默认值进行调用。(代码解释如下:)

void delay(int loops=1000)
{    
}
int main()
{
    delay(100);
    cout<<"延时100个时间单位"<<endl;//延时1000个时间单位
    delay(); //等同于delay(1000)
    cout<<"延时1000个时间单位@"<<endl;//延时100个时间单位@ 
    return 0;
}

——————————-注意——————————————–

  • 默认参数的相关注意:

1.默认参数并不一定是常量表达式,可以是任意表达式,则函数每次被调用时该表达式被重新求值,但表达式必须有意义。例如:

int fun1(a=rand());//调用时若省略参数a,即fun1();可由随机数发生函数当场产生,编译时确定调什么函数。

2.默认参数还可以是全局常量、全局变量,甚至可以通过函数调用给出;但不能通过局部变量给出,因为局部变量的值在执行时才有意义。
3.默认参数还可以有多个,但所有默认参数必须放在参数表的右侧,即先定义所有的非默认参数,再定义默认参数。例如: int sum(int a,int b=100,int c=200);这是因为在函数调用时,参数自左向右逐个匹配,当实参和形参个数不一致时只有这样才不会产生二义性。
4.在同一个作用域中一个参数只能被指定一次默认值不可以在声明和定义中同时指定默认值,即使默认值一样也不行。例如:

int fun2 (int a, int  b=10, int c=20); //函数原型中给出缺省值,参数名也可省略
int fun2(int a, int b, int c)
{…}//定义中不再给出缺省值

5.习惯上,默认参数在公共头文件包含的函数声明中指定,否则默认实参只能用于包含该函数定义的文件中的函数调用。
6.在不同作用域或嵌套作用域中可以重新声明默认参数,但不提倡。在嵌套作用域中声明一个名字去屏蔽在外层作用域的同一名字的声明,尤其容易出错。

猜你喜欢

转载自blog.csdn.net/zhaoshuling1109/article/details/80500955