文章目錄
- 缺省參數的概念
- 缺省參數的分類
- 1、全缺省參數
- 2、半缺省參數
- 缺省參數實際應用場景

缺省參數的概念
缺省參數是聲明或定義函數時為函數的參數指定一個缺省值。在調用該函數時,如果沒有指定實參則采用該形參的缺省值,否則使用指定的實參
正常調用一個函數
//正常調用一個函數,實參傳遞給形參
void func(int i)
{cout << i << endl;
}int main()
{func(1);func(2);func(3);
}
加入缺省參數
缺省參數就相對一個備胎,實參沒傳值過來,那么形參就用缺省參數給的值
打印結果:
void func(int i = 0)
{cout << i << endl;
}int main()
{func(1);func(2);func();
}
缺省參數的分類
1、全缺省參數
//全缺省參數
void func(int a = 10,int b =20,int c = 30)
{cout << a << endl;cout << b << endl;cout << c << endl;
}int main()
{func();cout << endl;func(1);cout << endl;func(1,2);cout << endl;func(1, 2, 3);cout << endl;return 0;
}
打印結果:
注意:千萬不能這樣寫,這是c++語法不支持的
2、半缺省參數
//半缺省參數
void func(int a, int b = 20, int c = 30)
{cout << a << endl;cout << b << endl;cout << c << endl;
}int main()
{cout << endl;func(1);cout << endl;func(1, 2);cout << endl;func(1, 2, 3);cout << endl;return 0;
}
打印結果
注意:必須從左往右連續缺省
千萬不能這樣
缺省參數實際應用場景
舉一個例子,利用 缺省參數 實現數據結構中的 棧(Stack) 初始化
之前用C語言來實現這個初始化是這樣的
struct Stack
{int* a;int top;//棧頂int capacity;//棧的容量
};void StackInit(struct Stack* ps)
{ps->a = NULL;//pst->top = -1; // top 指向棧頂數據ps->top = 0; // top 指向棧頂數據的下一個位置ps->capacity = 0;
}
這里的capacity(容量) 就直接初始化為0了,因為在之前棧實現是動態開辟容量空間的,當一個元素入棧,就會先檢查空間是否足夠,如果不夠就再來增加容量,這種情況是當你不知道要入多少元素到棧里面去,你只能每次入棧前就先檢查一下容量是否足夠,如果不夠往往容量空間是成倍數的增加的,當你不在需要入元素進棧就會產生一定的空間浪費
現在這種利用缺省參數的形式,在你確認需要入多少個元素的情況下直接把capacity定義為缺省參數,例如下面的方式:
struct Stack
{int* a;int top;//棧頂int capacity;//棧的容量
};void StackInit(struct Stack* ps, int capacity = 4)
{ps->a = (int*)malloc(sizeof(int) * capacity);ps->top = 0;ps->capacity = capacity;
}int main()
{struct Stack st;StackInit(&st, 100);
}
現在知道一定會插入100個數據,就可以顯示傳參數100,提前開好空間,避免空間擴容這個步驟,減少空間的浪費