【C++】預設引數及其分類
阿新 • • 發佈:2019-01-07
C++中有個重要的概念叫做預設引數。那麼什麼是預設引數呢?我們可以把它理解為備胎。
預設引數是宣告或定義函式時為函式的引數指定一個預設值。在呼叫該函式時,如果沒有指定實參則採用該預設值,否則使用指定的實參。
void TestFunc(int a = 0)
{
cout<<a<<endl;
}
int main()
{
TestFunc(); // 沒有傳參時,使用引數的預設值
TestFunc(10); // 傳參時,使用指定的實參
}
它主要有以下兩種形式:
1.全預設引數
在宣告和定義時,所有引數都指定了預設值叫做全預設引數。
void TestFunc(int a = 10, int b = 20, int c = 30) { cout<<"a = "<<a<<endl; cout<<"b = "<<b<<endl; cout<<"c = "<<c<<endl; }
2.半預設引數
在宣告和定義時,部分引數指定了預設值叫做半預設引數。
void TestFunc(int a, int b = 10, int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
或者
void TestFunc(int a, int b , int c = 20) { cout<<"a = "<<a<<endl; cout<<"b = "<<b<<endl; cout<<"c = "<<c<<endl; }
像這樣是錯誤的。因為這樣的話如果傳兩個引數,系統搞不懂你是傳給前兩個還是後兩個,難以明確。所以預設引數必須連續並且從右往左預設。
void TestFunc(int a=10, int b , int c = 20)
{
cout<<"a = "<<a<<endl;
cout<<"b = "<<b<<endl;
cout<<"c = "<<c<<endl;
}
注意:
1. 半預設引數必須從右往左依次來給出,不能間隔著給。
2. 預設引數不能在函式宣告和定義中同時出現。
//a.h
void TestFunc(int a = 10);
// a.c
void TestFunc(int a = 20)
{}
// 注意:如果宣告與定義位置同時出現,恰巧兩個位置提供的值不同,那編譯器就無法確定到底該用那個
預設值。
3. 預設值必須是常量或者全域性變數
4. C語言不支援(編譯器不支援)