注意三點:
(1)如果函數的定義在函數調用之前, 則在函數定義時給出預設值,如果函數的定義在函數調用之後則應該在聲明中給出預設值
(2)一個函數不能即作為重載函數,又作為有預設參數的函數,以為容易出現二義性(說法不嚴格,其實隻要不産生二義性即可)
(3)帶預設值的參數都位于參數清單的最右端
#include <iostream>
using namespace std;
int fun(int a, int b=5)
{
return a+b;
}
int fun1(int a, int b, int c=5);
int fun2(int a, int b, int c, int d);
//int fun3(int a=1, int b, int c=2); //error 有預設值的右方不能有非預設值的變量存在
int main()
{
cout<<fun(3)<<endl;
cout<<fun1(1,2)<<endl;
//cout<<fun2(1,2,3)<<endl; //error,如果有預設值一定要在聲明中指出,否則,即使在定義指出也不生效
return 0;
}
//int fun1(int a, int b, int c=6) //error, 編譯錯誤,聲明中給出,定義時不能再重新賦預設值//有的編譯器可以通過
//{
// return a+b+c;
//}
int fun1(int a, int b, int c)
{
return a+b+c;
}
int fun2(int a, int b, int c, int d=8)
{
return a+b+c+d;
}