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

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

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

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

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

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

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

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

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

在 C++ 中,可以在定義函數(shù)時(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ū)別在于:當(dāng)編譯器處理調(diào)用內(nèi)聯(lián)函數(shù)的語(yǔ)句時(shí),不會(huì)將該語(yǔ)句編譯成函數(shù)調(diào)用的指令,而是直接將整個(gè)函數(shù)體的代碼插人調(diào)用語(yǔ)句處,就像整個(gè)函數(shù)體在調(diào)用處被重寫了一遍一樣。

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

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

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

另外,需要注意的是,調(diào)用內(nèi)聯(lián)函數(shù)的語(yǔ)句前必須已經(jīng)出現(xiàn)內(nèi)聯(lián)函數(shù)的定義(即整個(gè)數(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++中vector與remove()函數(shù)詳解

    C++中vector與remove()函數(shù)詳解

    這篇文章主要介紹了C++中vector與remove()函數(shù),本文實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • Java C++ 題解leetcode857雇傭K名工人最低成本vector pair

    Java C++ 題解leetcode857雇傭K名工人最低成本vector pair

    這篇文章主要為大家介紹了Java C++ 題解leetcode857雇傭K名工人最低成本vector pair示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • C語(yǔ)言 sizeof 函數(shù)詳情

    C語(yǔ)言 sizeof 函數(shù)詳情

    這篇文章主要介紹了C語(yǔ)言 sizeof 函數(shù),在 C 語(yǔ)言中,char 字符串也是一種非常重要的數(shù)據(jù)類型,我們除了使用 sizeof 函數(shù)獲取字符串長(zhǎng)度之外,使用 sizeof 函數(shù)同樣也可以完成字符串長(zhǎng)度的獲取,下面文章內(nèi)容具體描述該內(nèi)容,需要的朋友可以參考以下
    2021-10-10
  • C語(yǔ)言實(shí)現(xiàn)漢諾塔(圖文詳解)

    C語(yǔ)言實(shí)現(xiàn)漢諾塔(圖文詳解)

    個(gè)人覺得漢諾塔這個(gè)遞歸算法比電子老鼠的難了一些,不過一旦理解了也還是可以的,其實(shí)網(wǎng)上也有很多代碼,可以直接參考。記得大一開始時(shí)就做過漢諾塔的習(xí)題,但是那時(shí)代碼寫得很長(zhǎng)很長(zhǎng),也是不理解遞歸的結(jié)果。今天重新來實(shí)現(xiàn)一下
    2021-08-08
  • C/C++程序編譯流程詳解

    C/C++程序編譯流程詳解

    C/C++程序編譯過程包括下面4個(gè)階段:1.預(yù)處理,2.編譯,3.匯編,4.鏈接。下面我們就來詳細(xì)分析下這幾個(gè)階段。
    2016-04-04
  • 詳解如何將c語(yǔ)言文件打包成exe可執(zhí)行程序

    詳解如何將c語(yǔ)言文件打包成exe可執(zhí)行程序

    這篇文章主要介紹了詳解如何將c語(yǔ)言文件打包成exe可執(zhí)行程序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C++ 實(shí)例之九宮格廣度優(yōu)先遍歷

    C++ 實(shí)例之九宮格廣度優(yōu)先遍歷

    這篇文章主要介紹了C++ 實(shí)例之九宮格廣度優(yōu)先遍歷的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • C語(yǔ)言實(shí)現(xiàn)輸入ascii碼,輸出對(duì)應(yīng)的字符方式

    C語(yǔ)言實(shí)現(xiàn)輸入ascii碼,輸出對(duì)應(yīng)的字符方式

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)輸入ascii碼,輸出對(duì)應(yīng)的字符方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 淺談const變量賦值報(bào)錯(cuò)分析

    淺談const變量賦值報(bào)錯(cuò)分析

    在類中 只有靜態(tài)變量能賦值 如果你不賦值 編譯器會(huì)認(rèn)為你這個(gè)變量根本沒用 不能被修改 又沒有初始值 兩個(gè)辦法 在構(gòu)造函數(shù)的初始化列表賦值 或者在const前面加一個(gè)static
    2015-07-07
  • C++實(shí)現(xiàn)棧的操作(push和pop)

    C++實(shí)現(xiàn)棧的操作(push和pop)

    這篇文章主要介紹了C++實(shí)現(xiàn)棧的操作(push和pop),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論

伊春市| 增城市| 迁安市| 宜兰县| 迁安市| 龙南县| 台中县| 侯马市| 鲁山县| 南江县| 东乌| 桐梓县| 阜平县| 汉寿县| 云南省| 河北省| 红桥区| 富蕴县| 蒲江县| 开江县| 金门县| 栾川县| 汤原县| 密云县| 容城县| 遂溪县| 分宜县| 兰西县| 盐池县| 广南县| 原阳县| 神池县| 舞钢市| 临夏市| 合川市| 沁水县| 新龙县| 碌曲县| 通州市| 旌德县| 和龙市|