1. 程式人生 > >【C++】預設引數及其分類

【C++】預設引數及其分類

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語言不支援(編譯器不支援)