下面代碼中備注部分為 從匯編指令角度 看形參帶默認值得函式呼叫
點擊查看代碼
#include <iostream>
using namespace std;
int sum(int a=10,int b=20){
return a + b;
}
int main(){
int a =1;
int b =2;
/*
mov eax, dword ptr[ebp-8]
push eax 引數b壓堆疊
mov ecx ,dword ptr[ebp-4]
push ecx 引數a壓堆疊
call sum
*/
int ret1 =sum(a,b);
/*
push 14H //立即數直接壓堆疊
mov ecx,dword ptr[ebp-4]
push ecx
call sum
*/
int ret2=sum(a);
/*
push 14H
push 0AH
call sum
*/
int ret3=sum();
return 0;
}
關于形參帶默認值的函式呼叫需要注意的幾個點
1.給默認值得時候,從右往左給
2.呼叫效率問題,引數使用默認值得時候直接push一個數值,而不是默認值的情況,需要兩步匯編指令,第一步將記憶體中的值取出放入暫存器, 第二步將暫存器的值壓堆疊,要多一步匯編指令,效率對比要低
3.定義可以給出默認值,宣告也可以給默認值,如下代碼
點擊查看代碼
#include <iostream>
using namespace std;
int sum(int a=10,int b=20);
int main(){
int a =1;
int b =2;
int ret1 =sum(a,b);
int ret2=sum(a);
int ret3=sum();
return 0;
}
int sum(int a,int b){
return a + b;
}
4.形參給默認值得時候,不管是定義處,還是宣告處,不能出現重復,形參默認值只能出現一次
以下方式 編譯報錯
int sum(int a=10,int b=20);
int sum(int a,int b=2000) ;
以下方式 編譯通過
int sum(int a , int b=2000) ;
int sum(int a=10, int b);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/514048.html
標籤:C++
上一篇:StampedLock:一個并發編程中非常重要的票據鎖
下一篇:Object Lessons
