1. 程式人生 > >C++對引數直接賦值

C++對引數直接賦值

在C++中,可以為引數指定預設值。在函式呼叫時沒有指定與形參相對應的實參時, 就自動使用預設引數。

預設引數的語法與使用:
(1)在函式宣告或定義時,直接對引數賦值。這就是預設引數;
(2)在函式呼叫時,省略部分或全部引數。這時可以用預設引數來代替。

注意:
(1)預設引數只可在函式宣告中設定一次。只有在沒有函式宣告時,才可以在函式定義中設定。(#add ,此句意為存在函式宣告和定義兩部分的時候。驗證表明有這個限制,可以隨便,但出於規範,在宣告中指定)
(2)如果一個引數設定了預設值時,其右邊的引數都要有預設值。(#add 這是定義時,類的成員函式的引數表在宣告時預設引數位於引數表右部, 使用時該怎樣待總結)
如:int mal(int a, int b=3, int c=6, int d=8)    正確,按從右到左順序設定預設值。
        int mal(int a=6, int b=3, int c=5, int d)   錯誤,未按照從右到左設定預設值。c設定預設值了,而其右邊的d沒有預設值。
(3)預設引數呼叫時,則遵循引數呼叫順序,自左到右逐個呼叫。這一點要與第(2)分清楚,不要混淆。(#add 神馬意思啊? 暫理解為兩個預設引數之間的引數必須賦預設值, 錯,意為呼叫函式時,從左至右第一個實參即為第一個形參的實參,依此類推)
如:void   mal(int a, int b=3, int c=5);      //預設引數
           mal(3, 8, 9 );                          //呼叫時有指定引數,則不使用預設引數
           mal(3, 5);                       //呼叫時只指定兩個引數,按從左到右順序呼叫,相當於mal(3,5,5);
              mal(3);                           //呼叫時只指定1個引數,按從左到右順序呼叫,相當於mal(5,3,5);
              mal( );                           //錯誤,因為a沒有預設值
              mal(3, , 9)                      //錯誤,應按從左到右順序逐個呼叫
再如: void mal(int a=8, int b=3, int c=5);      //預設引數
               mal( );                                                      //正確,呼叫所有預設引數,相當於mal(8,3,5);

(4)預設值可以是全域性變數、全域性常量,甚至是一個函式。但不可以是區域性變數。因為預設引數的呼叫是在編譯時確定的,而區域性變數位置與預設值在編譯時無法確定。