欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ 內(nèi)聯(lián)函數(shù)inline案例詳解

 更新時間:2021年09月02日 10:30:03   投稿:xusong  
這篇文章主要介紹了C++ 內(nèi)聯(lián)函數(shù)inline案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下

使用函數(shù)能夠避免將相同代碼重寫多次的麻煩,還能減少可執(zhí)行程序的體積,但也會帶來程序運行時間上的開銷。

函數(shù)調(diào)用在執(zhí)行時,首先要在棧中為形參和局部變量分配存儲空間,然后還要將實參的值復(fù)制給形參,接下來還要將函數(shù)的返回地址(該地址指明了函數(shù)執(zhí)行結(jié)束后,程序應(yīng)該回到哪里繼續(xù)執(zhí)行)放入棧中,最后才跳轉(zhuǎn)到函數(shù)內(nèi)部執(zhí)行。這個過程是要耗費時間的。

另外,函數(shù)執(zhí)行 return 語句返回時,需要從棧中回收形參和局部變量占用的存儲空間,然后從棧中取出返回地址,再跳轉(zhuǎn)到該地址繼續(xù)執(zhí)行,這個過程也要耗費時間。

總之,使用函數(shù)調(diào)用語句和直接把函數(shù)中的代碼重新抄寫一遍相比,節(jié)省了人力,但是帶來了程序運行時間上的額外開銷。

一般情況下,這個開銷可以忽略不計。但是,如果一個函數(shù)內(nèi)部沒有幾條語句,執(zhí)行時間本來就非常短,那么這個函數(shù)調(diào)用產(chǎn)生的額外開銷和函數(shù)本身執(zhí)行的時間相比,就顯得不能忽略了。假如這樣的函數(shù)在一個循環(huán)中被上千萬次地執(zhí)行,函數(shù)調(diào)用導(dǎo)致的時間開銷可能就會使得程序運行明顯變慢。

作為特別注重程序執(zhí)行效率,適合編寫底層系統(tǒng)軟件的高級程序設(shè)計語言,C++ 用 inline 關(guān)鍵字較好地解決了函數(shù)調(diào)用開銷的問題。

在 C++ 中,可以在定義函數(shù)時,在返回值類型前面加上 inline 關(guān)鍵字。如:

inline int Max (int a, int b)
{
    if(a >b)
        return a;
    return b;
}

增加了 inline 關(guān)鍵字的函數(shù)稱為“內(nèi)聯(lián)函數(shù)”。內(nèi)聯(lián)函數(shù)和普通函數(shù)的區(qū)別在于:當編譯器處理調(diào)用內(nèi)聯(lián)函數(shù)的語句時,不會將該語句編譯成函數(shù)調(diào)用的指令,而是直接將整個函數(shù)體的代碼插人調(diào)用語句處,就像整個函數(shù)體在調(diào)用處被重寫了一遍一樣。

有了內(nèi)聯(lián)函數(shù),就能像調(diào)用一個函數(shù)那樣方便地重復(fù)使用一段代碼,而不需要付出執(zhí)行函數(shù)調(diào)用的額外開銷。很顯然,使用內(nèi)聯(lián)函數(shù)會使最終可執(zhí)行程序的體積增加。以時間換取空間,或增加空間消耗來節(jié)省時間,這是計算機學科中常用的方法。

內(nèi)聯(lián)函數(shù)中的代碼應(yīng)該只是很簡單、執(zhí)行很快的幾條語句。如果一個函數(shù)較為復(fù)雜,它執(zhí)行的時間可能上萬倍于函數(shù)調(diào)用的額外開銷,那么將其作為內(nèi)聯(lián)函數(shù)處理的結(jié)果是付出讓代碼體積增加不少的代價,卻只使速度提高了萬分之一,這顯然是不劃算的。

有時函數(shù)看上去很簡單,例如只有一個包含一兩條語句的循環(huán),但該循環(huán)的執(zhí)行次數(shù)可能很多,要消耗大量時間,那么這種情況也不適合將其實現(xiàn)為內(nèi)聯(lián)函數(shù)。

另外,需要注意的是,調(diào)用內(nèi)聯(lián)函數(shù)的語句前必須已經(jīng)出現(xiàn)內(nèi)聯(lián)函數(shù)的定義(即整個數(shù)體),而不能只出現(xiàn)內(nèi)聯(lián)函數(shù)的聲明。

到此這篇關(guān)于C++ 內(nèi)聯(lián)函數(shù)inline案例詳解的文章就介紹到這了,更多相關(guān)C++ 內(nèi)聯(lián)函數(shù)inline內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言實現(xiàn)簡單職工信息管理系統(tǒng)

    C語言實現(xiàn)簡單職工信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • c語言讀取obj文件轉(zhuǎn)換數(shù)據(jù)的小例子

    c語言讀取obj文件轉(zhuǎn)換數(shù)據(jù)的小例子

    c語言讀取obj文件轉(zhuǎn)換數(shù)據(jù)的小例子,需要的朋友可以參考一下
    2013-03-03
  • QT利用QPainter繪制三維餅狀圖

    QT利用QPainter繪制三維餅狀圖

    這篇文章主要為大家詳細介紹了如何利用QPainter實現(xiàn)三維餅狀圖的繪制,由于Qt中沒有三維餅狀圖的繪制組件,因此只能自行繪制,感興趣的可以動手嘗試一下
    2022-06-06
  • C語言 詳細分析結(jié)構(gòu)體的內(nèi)存對齊

    C語言 詳細分析結(jié)構(gòu)體的內(nèi)存對齊

    C 數(shù)組允許定義可存儲相同類型數(shù)據(jù)項的變量,結(jié)構(gòu)是 C 編程中另一種用戶自定義的可用的數(shù)據(jù)類型,它允許你存儲不同類型的數(shù)據(jù)項,本篇讓我們來了解C 的結(jié)構(gòu)體內(nèi)存對齊
    2022-03-03
  • C語言實現(xiàn)雙人反彈球游戲

    C語言實現(xiàn)雙人反彈球游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)雙人反彈球游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++基于EasyX實現(xiàn)簡單掃雷游戲

    C++基于EasyX實現(xiàn)簡單掃雷游戲

    這篇文章主要為大家詳細介紹了C++基于EasyX實現(xiàn)簡單掃雷游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • STL list鏈表的用法詳細解析

    STL list鏈表的用法詳細解析

    這篇文章是關(guān)于C++語言的一個新的擴展——標準模板庫的(Standard Template Library),也叫STL
    2013-09-09
  • C++實現(xiàn)Dijkstra算法

    C++實現(xiàn)Dijkstra算法

    這篇文章主要為大家詳細介紹了C++實現(xiàn)Dijkstra算法完整代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C++深淺拷貝及簡易string類實現(xiàn)方式

    C++深淺拷貝及簡易string類實現(xiàn)方式

    這篇文章主要介紹了C++深淺拷貝及簡易string類實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java C++算法題解leetcode1592重新排列單詞間的空格

    Java C++算法題解leetcode1592重新排列單詞間的空格

    這篇文章主要為大家介紹了Java C++算法題解leetcode1592重新排列單詞間的空格示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09

最新評論