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