1.缺省参数说明
将声明或定义函数时的参数指定一个值(该值即为缺省值)
注:当实参没有指定数值就采用缺省值否则采用实参。
#include <iostream>
#include <assert.h>
using namespace std;
void Func(int a = 0)//在形参后面加个值
{
cout << a << endl;
}
int main()
{
Func(); // 没有传参时,使⽤参数的默认值
Func(10); // 传参时,使⽤指定的实参
return 0;
}
2.缺省参数的分类
全缺省就是全部形参给缺省值
半缺省就是部分形参给缺省值
注 :C++规定半缺省参数必须从右往左 依次连续缺省,不能间隔跳跃给缺省值。
3.应用
例如,在栈构建空间时会动态开辟通常以二的倍速增加一定就会亏损,因此控制空间大小显得尤为重要。
// Stack.h
#include <iostream>
#include <assert.h>
using namespace std;
typedef int STDataType;
typedef struct Stack
{
STDataType* a;
int top;
int capacity;
}ST;
void STInit(ST* ps, int n = 4);
// Stack.cpp
#include"Stack.h"
// 缺省参数不能声明和定义同时给
void STInit(ST* ps, int n)
{
assert(ps && n > 0);
ps->a = (STDataType*)malloc(n * sizeof(STDataType));
ps->top = 0;
ps->capacity = n;
}
// test.cpp
#include"Stack.h"
int main()
{
ST s1;
STInit(&s1);
// 确定知道要插⼊1000个数据,初始化时⼀把开好,避免扩容
ST s2;
STInit(&s2, 1000);
return 0;
}
在初始化中确定知道要插⼊1000个数据,初始化时⼀把开好,避免扩容
注:当文件中声明与定义分开时,缺省参数只等在声明中给缺省值。
因为:在定义中只有在编译的时候才会调用。