在c++中,定義函式時可以給形參指定乙個預設的值,這樣呼叫函式時如果沒有給這個形參賦值(沒有對應的實參),那麼就使用這個預設的值。也就是說,呼叫函式時可以省略有預設值的引數。如果使用者指定了引數的值,那麼就使用使用者指定的值,否則使用引數的預設值。
所謂預設引數,指的是當函式呼叫中省略了實參時自動使用的乙個值,這個值就是給形參指定的預設值。下面是乙個簡單的示例:
#include
using namespace std;
//帶預設引數的函式
void func(int n, float b=1.2, char c=
'@')
int main(
)
執行結果:
10, 3.5, #
20, 9.8, @
30, 1.2, @
對於帶引數列表的函式,必須從右向左新增預設值。也就是說,要為某個引數設定預設值,則必須為它的右邊的所有引數提供預設值:
int function1(int n,int m = 4,int j = 5)
; //有效
int function2(int n,int m = 6,int j)
; //無效
int function3(int k = 1,int m = 2,int n = 3)
; //有效
例如,function1( )原型允許呼叫該函式時提供1個、2個或3個引數:
beeps = function1(2)
;//即function1(2,4,5)
beeps = function1(1,8)
;//即function1(1,8,5)
beeps = function1(8,7,6)
;//即function1(8,7,6)沒有使用預設引數
實參按從左到右的順序依次被賦給相應的形參,而不能跳過任何引數。因此,下面的呼叫是不允許的:
beeps = function1(3,,8)//無效
這種預設引數的情況會帶來有些便利。(比如初始化乙個商品物件,在99%的情況在都是正常的,那麼這個商品是否正常的標記就可以預設為1,特殊的1%情況,再加上)。但是有以下三個要注意的情況:
1.預設引數只能放在函式宣告處或者定義處,能放在宣告處就放在宣告處 。
a. 大部分情況,別人呼叫你的**只能看到函式宣告,如果你寫在定義處,別人根本不知道你的預設引數是什麼。
b.如果你是在定義處寫的預設引數,那麼你在使用該函式前就需要把函式定義放在前面。不然編譯階段通過無缺省引數的函式宣告無法確定這個函式是帶預設引數的。
所以,預設引數寫在宣告處。
2.如果某個引數是預設引數,那麼它後面的引數必須都是預設引數
因為非預設引數的引數必須要給出具體值,而呼叫函式傳遞引數的時候是從左到右的,所以非預設引數前面的都必須要傳值進來。
那麼預設引數後面的當然也得都為預設引數。
3.不要過載乙個帶預設引數的函式
class test
int func(int a, int b = 1)
};
你呼叫func(1)的時候,誰知道你想呼叫哪乙個。
c++函式預設引數
c++函式的預設引數詳解
c++ 函式的預設引數
預設實參,constexpr函式
我們使用string物件表示視窗內容時,希望視窗的高,寬等都有乙個預設值。但同時允許這些引數自由指定與預設不同的值,此時可以定義成如下形式 typedef string size type sz string screen sz ht 24,sz wid 80,char backgrnd 引用時,如...
c 虛函式與預設實參
c primer 中原文 像其他任何函式一樣,虛函式也可以有預設實參。通常,如果有用在給定呼叫中的預設實參值,該值在編譯時確定。如果乙個呼叫省略了具有預設值的實參,則所用的值由呼叫該函式的型別定義,與物件的動態型別無關 通過基類的引用或指標呼叫虛函式時,預設實參為在基類虛函式宣告中指定的值,如果通過...
傳入引數個數 main函式引數的秘密
大家應該都有乙個模糊的記憶,c語言中main函式是程式的入口函式,所以程式執行時main函式呼叫別的函式,並且給別的函式傳入引數。但是沒人告訴我們是誰 呼叫 的main函式。其實我們可以理解為是作業系統呼叫的main函式,所以main函式的引數應該是作業系統給的,也就是說我們的在命令列介面執行程式是...