C++中帶預設值引數的函式
阿新 • • 發佈:2019-02-07
函式的預設引數值,即在定義引數的時候同時給它一個初始值。在呼叫函式的時候,我們可以省略含有預設值的引數。也就是說,如果使用者指定了引數值,則使用使用者指定的值,否則使用預設引數的值。
例1:
int sum(int a = 10,int b = 10)
{
return a+b;
}
int main()
{
sum(20,10);
sum();
//push 0Ah;
//push 0Ah;
//call sum
int a = 10;
// mov dword ptr [a],0Ah
int b = 10;
// mov dword ptr [b],0Ah
sum(a,b);
// mov eax,dword ptr [b]
// push eax
// mov ecx,dword ptr [a]
// push ecx
sum();
}
注意:函式呼叫時,使用立即數傳參比使用變數傳參效率要高,在彙編程式執行過程中少了變數的copy動作,不用在記憶體中取值再壓棧,在一定程度上進行了優化。但是無論是否指定呼叫傳遞的實參,都會將引數壓入棧中。
函式的預設引數不能出現在左邊的原因:
函式呼叫時,不能給函式的左邊引數傳遞預設值(即不傳參),而給右邊引數傳參,否則編譯不能通過。