linux编程--默认参数

来源:互联网 发布:stc89c52rc烧录软件 编辑:程序博客网 时间:2024/06/08 18:05

1. 如果一个函数中有多个默认参数,则形参分布中,默认参数应从右至左逐渐定义。当调用函数时,只能向左匹配参数。即默认参数右边全是默认参数。

2.默认参数可将一系列简单的重载函数合成为一个。例如, 下面3个重载函数:
    void point(int,int){//...}
    void point(int a){return point(a,4);}
    void point(){return point(3,4);}

  可以用下面的默认参数的函数来替代:
    void point(int=3,int=4);


3.

默认参数可以放在函数声明或者定义中,但只能放在二者之一

通常我们都将默认参数放在函数声明中,因为如果放在函数定义中,那么将只能在函数定义所在地文件中调用该函数。


4.

函数重载时谨慎使用默认参数值

比如下面两个重载函数func,一个只接受一个参数,而另一个接受两个参数,包括一个默认参数。

复制代码
class Test{public:    int func(int a)    {        return a;    }    int func(int a, int b = 1)    {        return a + b;    }} ;
复制代码

如果像下面这样调用函数

复制代码
int main(void) {     Test test;    int result = test.func(1);    getchar() ;     return 0 ; } 
复制代码

则编译器就不知道选择哪个函数,这就造成了混淆。

(1)在函数声明或定义时,直接对参数赋值。这就是默认参数;int f(paremrters);这里的参数paranters没有申明类型,就采用默认类型,(c语言中的默认类型均为int型,与设计语言结构的时候,其他类型均没有实现有关。)

(3)默认参数调用时,则遵循参数调用顺序,自左到右逐个调用。这一点要与参数申明分清楚。

(4)默认值可以是全局变量、全局常量,甚至是一个函数。但不可以是局部变量。因为默认参数的调用是在编译时确定的,而局部变量位置与默认值在编译时无法确定。

0 0
原创粉丝点击