C++中的默認參數是指在函數聲明中給某個形參一個默認值,當在調用函數時這個參數沒有被傳值,那麼就會使用默認參數,否則就使用傳進來的值。默認參數可以在函數聲明的時候指定。
一、默認參數的基本用法
定義一個帶有默認參數的函數可以像下面這樣:
#include<iostream>
using namespace std;
// 默認值在聲明中指定
int add(int x = 0, int y = 0)
{
return x + y;
}
int main()
{
cout << add() << endl; // 輸出 0
cout << add(1) << endl; // 輸出 1
cout << add(2, 3) << endl; // 輸出 5
return 0;
}
在上面的代碼中,我們定義了一個函數add(),它帶有兩個參數x和y,其中x和y的默認值均為0。在main函數中,我們分別調用add()函數,第一個調用沒有傳遞任何參數,因此使用x和y的默認值0,第二個調用只傳遞了一個參數1,因此使用x的值1和y的默認值0,第三個調用傳遞了兩個參數2和3,因此使用了x的值2和y的值3。
二、默認參數的注意事項
下面是一些需要注意的默認參數使用情況:
1. 參數順序
當函數有多個參數時,以默認參數結尾的函數聲明形參列表中的參數可以被省略,但是用戶必須以與聲明相同的順序提供非默認實參。
#include<iostream>
using namespace std;
// 不能把y放在x前面
int add(int x, int y = 0)
{
return x + y;
}
int main()
{
cout << add(1) << endl; // 輸出 1
cout << add(2, 3) << endl; // 輸出 5
return 0;
}
在上面的代碼中,我們可以看到,如果在函數聲明中把默認參數放在非默認參數之前,編譯器將會報錯。
2. 多個默認參數的函數
如果一個函數有多個參數需要設置默認值時,我們可以這樣來實現:
#include<iostream>
using namespace std;
int add(int x, int y = 0, int z = 0)
{
return x + y + z;
}
int main()
{
cout << add() << endl; // 輸出 0
cout << add(1) << endl; // 輸出 1
cout << add(2, 3) << endl; // 輸出 5
cout << add(4, 5, 6) << endl; // 輸出 15
return 0;
}
上面的代碼可看到,我們在函數聲明中分別為三個參數設置默認值,當我們調用函數時,可以選擇傳遞一個,兩個或者三個參數。如果只傳遞了一個參數,那麼前兩個參數將會使用默認值,如果傳遞了兩個參數,那麼第三個參數仍然使用默認值。
3. 默認參數可以是常量表達式
默認參數可以是任何完整類型的表達式,包括常量表達式。這意味着您可以使用任何表達式(包括使用常量表達式)來設置默認參數。
#include<iostream>
using namespace std;
#define DEFAULT_Y 10
int add(int x, int y = DEFAULT_Y);
int main()
{
cout << add(1) << endl; // 輸出 11
return 0;
}
int add(int x, int y)
{
return x + y;
}
4. 默認參數不能在聲明和定義處同時出現
默認參數需要在聲明或定義中指定,但不能同時出現。在聲明中指定的默認參數不允許出現在函數定義中,並且反之亦然。
下面這段代碼是錯誤的:
// 錯誤示例,同一參數不能同時在聲明和定義中指定默認值
#include<iostream>
using namespace std;
int add(int x = 10, int y = 20);
int main()
{
cout << add() << endl;
return 0;
}
int add(int x = 0, int y = 0)
{
return x + y;
}
三、結語
這篇文章詳細介紹了C++中默認參數的基本用法,以及需要注意的幾個問題。在編寫大型程序和代碼轉換時,這些默認值的靈活性非常有用。同時注意,不要濫用默認參數,以免使代碼變得更加難以理解。
原創文章,作者:DCVIE,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/325550.html