一.缺省
缺省就是默认的意思,对应计算机英文中的”default”缺省参数就是在函数定义时指定的默认值,当传参时未指定参数值时,就会使用默认值
二.分类
1.全缺省参数
上面这种传参方式都是正确的,但下面的就不正确了
因为在传参时,对于缺省参数进行赋值时,必须从左往右依次给出值,而不能有空出的。
2.半缺省参数
这几种方式哪些是正确的呢?
只有1和2是正确的。
为什么3,4,5错误呢?举个例子,如果要调用3:func3(1,3),那这个3是b的值还是c的值呢?无法确定,4和5也同理
所以半缺省参数有如下注意事项:半缺省参数必须从右向左给出缺省值
再看下面的代码:
这是因为c++规定,缺省参数不能同时在函数声明和定义中出现,为什么会这样规定呢?这就是防止出现定义和声明中对同一个变量给定的缺省值不同,当缺省值不同时,就会出现矛盾,编译器就不知道使用哪一个缺省值。所以为了避免这样的错误,就直接规定同一个参数不能再定义和函数中都缺省一遍(也就是缺省两遍)。但是,比如有abc三个变量,可以让c在声明中缺省,让b在定义中缺省,只要保整合起来是从右向左缺省的即可,如下:
但不推荐这样写,最好的做法是,只在声明中缺省!!!
总结:
1.半缺省参数必须从右往左给出,不能间隔着给
2.缺省参数不能在函数的定义和声明中同时出现,一般是建议都写在声明中
3.缺省值必须是常量或全局变量(也就是int a=10/int a=全局变量0)
4.C语言不支持该语法
三.缺省参数的实际应用——栈
栈在使用前要开辟空间,但有时候我们知道需要多大的空间,但有时又不知道。所以义函数时,我们就可以使用缺省参数,当已知栈的空间时就给出确定的值,未知时就使用默认值。如下:
stack.h中
stack.cpp中
test.cpp中调用如下: