目录
一、概念
1.什么是缺省参数?
缺省参数就是在定义函数时给的参数设置默认值,如果调用函数时未传入参数就使用这个默认值。
2.为什么引入缺省参数?
方便给函数参数设置默认值。调用函数的代价更小。
3.怎么使用?
在定义函数时从右往左设置缺省参数,中间不能有间隔。
调用函数时,从左往右传入参数,中间也不能有间隔。
二、全缺省参数和半缺省参数
1.全缺省参数:(所有参数都设置了缺省值)
void funa(int a = 0, int b = 1, int c = 2) { cout << a << ' ' << b << ' ' << c << endl; }
2.半缺省参数:(部分参数都设置了缺省值)
·半缺省只能从右往左连续设置缺省,中间不能有间隔。
void funb(int a , int b = 1, int c = 2)//必须从右往左(<--)连续缺省,不能有间隔 { cout << a << ' ' << b << ' ' << c << endl; }
eg. 从左往右设置缺省,会报错:
三、函数声明和定义分离时的缺省参数
1. 函数声明和函数定义分离时不能同时设置缺省参数:
2. 缺省参数以函数声明为准,函数定义中的缺省参数无效:
(声明中没有缺省参数,定义给了也没用。)
综上所述:缺省参数以声明为准。
四、缺省参数的使用
1. 半缺省只能从右往左连续设置缺省,中间不能有间隔。
2. 即使设置了缺省值,在传参时,我们依旧只能从左往右逐个传,中间不能有间隔。
(C++在调用函数时不支持func(a, , )和func( ,b, )这样的写法,即便设置了缺省参数也一样。)
3. 缺省参数以函数声明为准 。
要注意的是:
1. 缺省值必须是常量或全局变量。
2. C语言不支持缺省参数。
3. C++在调用函数时不支持Func(a, , )和Func( ,b, )这两种写法。即便设置了缺省参数也一样。
缺省参数的使用场景:顺序表,栈,队列的初始化
在这里使用缺省参数的好处是:
1.在知道容量的情况下可以传参给capacity指定容量,无需反复扩容浪费时间。
2.不传参就使用缺省参数,后续扩容就无需考虑capacity==0无法直接乘的问题。
五、总结
六、源代码
1.Test.h
#include<iostream>
using std::cin;
using std::cout;
using std::endl;
void func(int a = 0, int b = 1, int c = 2);
2.Test.cpp
#include"Test.h"
void func(int a, int b, int c)
{
cout << a << ' ' << b << ' ' << c << endl;
}
3.缺省参数.cpp
#include<iostream>
#include "Test.h"
using std::cin;
using std::cout;
using std::endl;
//全缺省
void funa(int a = 0, int b = 1, int c = 2)
{
cout << a << ' ' << b << ' ' << c << endl;
}
//半缺省
//void funb(int a = 0, int b = 1, int c)//错,设置缺省参数时只能从右往左设置
void funb(int a , int b = 1, int c = 2)//必须从右往左(<--)连续缺省,不能有间隔
{
cout << a << ' ' << b << ' ' << c << endl;
}
int main()
{
int a = 1;
funa(a);
//funa(, b, );//错,传参时只能从左往右逐个传
//funa(a, , );//错,C++不支持这种写法
funb(a);
func();
return 0;
}
//缺省参数不能在声明和定义中同时出现。(担心出现声明和定义中缺省值不同的情况)
//缺省实参以声明为准(声明中没给缺省,定义中给了也没用)
//关键:
//1.半缺省只能从右往左连续设置缺省,中间不能有间隔
//2.在传参时,我们只能只能从左往右逐个传,中间不能有间隔
//3.缺省实参以声明为准
------------------------END-------------------------
才疏学浅,谬误难免,欢迎各位批评指正。