C++中允許為函數提供默認參數,又名缺省參數。
使用默認參數時的注意事項:
① 有函數聲明(原型)時,默認參數可以放在函數聲明或者定義中,但只能放在二者之一。建議放在函數聲明中。
double sqrt(double f = 1.0); //函數聲明 double sqrt(double f) //函數定義 { // .... }
② 沒有函數(原型)時,默認參數在函數定義時指定.
//沒有 函數聲明 double sqrt(double f = 1.0) //函數定義
③ 在具有多個參數的函數中指定默認值時,默認參數都必須出現在不默認參數的右邊,一旦某個參數開始指定默認值,它右邊的所有參數都必須指定默認值.
int f (int i1, int i2 = 2, int i3 = 3); // 正確 int g (int i1, int i2 = 2, int i3); // 錯誤, i3未指定默認值 int h (int i1 = 1, int i2, int i3 = 3); // 錯誤, i2未指定默認值
④ 在調用具有默認參數的函數時, 若某個實參默認,其右邊的所有實參都應該默認。
//例如, 一個函數聲明如下 int f(int i1 = 1, int i2 =2, int i3 = 3); //調用函數 f() f(); //正確, i1=1, i2=2, i3=3 f(3); //正確, i1=3, i2=2, i3=3 f(2, 3); //正確, i1=2, i2=3, i3=3 f(4, 5, 6); //正確, i1=4, i2=5, i3=6 f(, 2, 3); //錯誤, i1默認,其右邊的i2和i3沒有默認
注意的是:
帶缺省值的參數必須放在參數列表的最后面。因為傳參是從右向左的。
缺省參數不能同時在函數聲明和定義中出現,只能二者留其一。
缺省值必須是常量或者全局變量。
C語言並不支持缺省。