最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從匯編看c++函數(shù)的默認參數(shù)的使用說明

 更新時間:2013年05月07日 10:23:19   作者:  
本篇文章介紹了,在c++中函數(shù)的默認參數(shù)的使用說明分析。需要的朋友參考下

在c++中,可以為函數(shù)提供默認參數(shù),這樣,在調用函數(shù)的時候,如果不提供參數(shù),編譯器將為函數(shù)提供參數(shù)的默認值。下面從匯編看其原理。

下面是c++源碼:

復制代碼 代碼如下:

int add(int a = 1, int b = 2) {//參數(shù)a b有默認值
    return a + b;
}
int main() {
   int c= add();//不提供參數(shù)

}

下面是mian函數(shù)里面的匯編碼:
復制代碼 代碼如下:

; 4    : int main() {

    push    ebp
    mov    ebp, esp
    push    ecx;為局部變量c分配了4字節(jié)的存儲空間 ecx為32位寄存器

; 5    :    int c= add();

    push    2;將2壓棧,就是add函數(shù)中b參數(shù)的默認值 這里參數(shù)壓棧方向是從右向左
    push    1;將1壓棧,就是add函數(shù)中a參數(shù)的默認值
    call    ?add@@YAHHH@Z                ; 調用add函數(shù)
    add    esp, 8;釋放剛才為add提供參數(shù)時的儲存空間
    mov    DWORD PTR _c$[ebp], eax;eax寄存器里面存放add函數(shù)返回值,寫入變量c里面

; 6    :   
; 7    : }

    xor    eax, eax
    mov    esp, ebp
    pop    ebp
    ret    0


下面是add函數(shù)的匯編碼:
復制代碼 代碼如下:

?add@@YAHHH@Z PROC                    ; add

; 1    : int add(int a = 1, int b = 2) {

    push    ebp
    mov    ebp, esp

; 2    :     return a + b;

    mov    eax, DWORD PTR _a$[ebp];將參數(shù)a的值寫入寄存器eax
    add    eax, DWORD PTR _b$[ebp];將參數(shù)b的值取出與eax里面的值相加,結果存入eax寄存器

; 3    : }

    pop    ebp
    ret    0
?add@@YAHHH@Z ENDP


下面是只提供一個參數(shù)值得情況

先看c++源碼:

復制代碼 代碼如下:

int add(int a = 1, int b = 2) {//參數(shù)a b有默認值
    return a + b;
}
int main() {
   int a = 3;
   int c= add(a);//只為a提供參數(shù)

}

下面是main函數(shù)里面的匯編碼:
復制代碼 代碼如下:

; 4    : int main() {

    push    ebp
    mov    ebp, esp
    sub    esp, 8;esp寄存器作為棧指針移動8字節(jié),為局部變量a,c預留存儲空間

; 5    :    int a = 3;

    mov    DWORD PTR _a$[ebp], 3;將3寫入局部變量a所在存儲空間

; 6    :    int c= add(a);//不提供參數(shù)

    push    2;將2壓棧,提供b參數(shù)默認值
    mov    eax, DWORD PTR _a$[ebp];取出a的值,放入寄存器eax里面
    push    eax;將eax里面的值壓棧,提供參數(shù)a的值,這里不是提供的默認值1
    call    ?add@@YAHHH@Z                ; 調用add函數(shù)
    add    esp, 8;釋放剛才為調用函數(shù)add為參數(shù)分配的8byte空間
    mov    DWORD PTR _c$[ebp], eax;eax里面存放調用函數(shù)的結果,寫到c所在存儲空間里面

; 7    :   
; 8    : }

    xor    eax, eax
    mov    esp, ebp
    pop    ebp
    ret    0


可以看到,和上面的不同之處在于沒有為a提供默認的參數(shù)值。

下面是add函數(shù)的匯編碼,與第一種情況一樣,沒有變化:

復制代碼 代碼如下:

?add@@YAHHH@Z PROC                    ; add

; 1    : int add(int a = 1, int b = 2) {//參數(shù)a b有默認值

    push    ebp
    mov    ebp, esp

; 2    :     return a + b;

    mov    eax, DWORD PTR _a$[ebp]
    add    eax, DWORD PTR _b$[ebp]

; 3    : }

    pop    ebp
    ret    0
?add@@YAHHH@Z ENDP


這里由于為參數(shù)a給出了明確的值,因此編譯器只為參數(shù)b提供默認值??上攵魹閍dd函數(shù)都提供了明確的參數(shù)值,那么編譯器就不會為參數(shù)a,b提供默認值了。

相關文章

  • 教你用Matlab制作立體動態(tài)相冊

    教你用Matlab制作立體動態(tài)相冊

    沒想到吧,MATLAB竟也能制作3D相冊!本文將為大家詳細介紹Matlab制作立體動態(tài)相冊的方法步驟,感興趣的小伙伴可以跟隨小編一起動手試一試
    2022-03-03
  • C語言函數(shù)傳遞數(shù)組和傳遞地址的區(qū)別你知道嗎

    C語言函數(shù)傳遞數(shù)組和傳遞地址的區(qū)別你知道嗎

    這篇文章主要介紹了C語言中數(shù)組作為函數(shù)的參數(shù)以及返回值的使用簡單入門,這里以一維數(shù)組作為基本條件進行例子講解,需要的朋友可以參考下
    2021-09-09
  • C++自定義封裝socket操作業(yè)務類完整實例

    C++自定義封裝socket操作業(yè)務類完整實例

    這篇文章主要介紹了C++自定義封裝socket操作業(yè)務類,結合完整實例形式分析了Linux環(huán)境下C++操作socket的封裝業(yè)務類,可實現(xiàn)基本的socket連接、參數(shù)設置、發(fā)送請求等基本功能,需要的朋友可以參考下
    2017-08-08
  • C++中typedef 及其與struct的結合使用

    C++中typedef 及其與struct的結合使用

    這篇文章主要介紹了C++中typedef 及其與struct的結合使用,需要的朋友可以參考下
    2014-02-02
  • C++設計模式編程中的觀察者模式使用示例

    C++設計模式編程中的觀察者模式使用示例

    這篇文章主要介紹了C++設計模式編程中的觀察者模式使用示例,觀察者模式在被觀察者和觀察者之間建立一個抽象的耦合,需要的朋友可以參考下
    2016-03-03
  • 一文帶你吃透C++繼承

    一文帶你吃透C++繼承

    繼承是C++語言的一個重要特性,繼承使得軟件(代碼)復用變得簡單、易行,可以通過繼承復用已有的程序資源,縮短軟件開發(fā)的周期,本就帶大家吃透C++繼承,需要的朋友可以參考下
    2023-06-06
  • C語言switch語句詳解

    C語言switch語句詳解

    這篇文章主要為大家介紹了C語言switch語句,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C++?超詳細示例講解list的使用

    C++?超詳細示例講解list的使用

    list是一種序列式容器。list容器完成的功能實際上和數(shù)據(jù)結構中的雙向鏈表是極其相似的,list中的數(shù)據(jù)元素是通過鏈表指針串連成邏輯意義上的線性表,也就是list也具有鏈表的主要優(yōu)點,即:在鏈表的任一位置進行元素的插入、刪除操作都是快速的
    2022-07-07
  • 詳解C++?指針與二維數(shù)組名

    詳解C++?指針與二維數(shù)組名

    和一維數(shù)組類似,C++?將二維數(shù)組名解釋為其第一個元素的地址,而二維數(shù)組的第一個元素為一維數(shù)組,下面詳細總結下二維數(shù)組名的性質,需要的朋友可以參考下
    2022-09-09
  • C++中線性代數(shù)計算Eigen庫的使用教程詳解

    C++中線性代數(shù)計算Eigen庫的使用教程詳解

    Eigen是一個基于線性代數(shù)的C++模板庫,主要用于矩陣、向量、數(shù)值求解和相關算法,本文主要為大家簡單聊聊Eigen庫的使用,希望對大家有所幫助
    2023-12-12

最新評論

婺源县| 怀远县| 北辰区| 龙里县| 儋州市| 北京市| 同仁县| 新晃| 原平市| 双鸭山市| 高州市| 来凤县| 大埔县| 梅州市| 万年县| 西盟| 临武县| 新余市| 子洲县| 长泰县| 墨脱县| 凤阳县| 保山市| 朝阳县| 广昌县| 尼玛县| 积石山| 合川市| 噶尔县| 游戏| 新化县| 馆陶县| 阿克陶县| 历史| 临夏市| 河北省| 秦皇岛市| 盐山县| 温宿县| 永福县| 阿拉善左旗|