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

C++內(nèi)聯(lián)函數(shù)詳情

 更新時(shí)間:2021年11月16日 10:52:14   作者:梁唐  
這篇文章主要介紹了C++內(nèi)聯(lián)函數(shù),文章主要圍繞C++內(nèi)聯(lián)函數(shù)的相關(guān)資料展開詳細(xì)內(nèi)容,需要的朋友可以參考一下,希望對大家有所幫助

內(nèi)聯(lián)函數(shù)是C++當(dāng)中為了提高程序運(yùn)行效率的設(shè)計(jì),老實(shí)講我沒有在其他語言當(dāng)中看到類似的設(shè)計(jì)。它和常規(guī)函數(shù)之間的主要區(qū)別不在于編寫的方式,而是在于C++編譯器會(huì)將內(nèi)聯(lián)函數(shù)組合到程序當(dāng)中執(zhí)行。

要解釋這個(gè)過程會(huì)稍稍有些復(fù)雜,我們需要從編譯的過程說起。對于編譯型語言而言,編譯器做的事情是把人類寫出來人能讀懂的代碼翻譯成機(jī)器能夠識別、執(zhí)行的機(jī)器語言,一般是一串十六進(jìn)制的指令。隨后計(jì)算機(jī)逐步執(zhí)行這些指令,完成我們想要的功能。

當(dāng)我們調(diào)用函數(shù)時(shí),其實(shí)本質(zhì)上是指令跳轉(zhuǎn),先記錄下當(dāng)前運(yùn)行的指令位置,跳轉(zhuǎn)到函數(shù)所在的指令位置進(jìn)行執(zhí)行,執(zhí)行完成之后再跳轉(zhuǎn)回來。這個(gè)當(dāng)中除了跳轉(zhuǎn)之外,還會(huì)發(fā)生一些參數(shù)的傳遞和拷貝,需要一定的開銷。

而使用內(nèi)聯(lián)函數(shù),本質(zhì)上可以理解成使用相應(yīng)的函數(shù)代碼代替了函數(shù)調(diào)用??梢院唵卫斫獬砂押瘮?shù)當(dāng)中的代碼拷貝了一份粘貼到了函數(shù)調(diào)用的位置,代替了函數(shù)跳轉(zhuǎn)。舉個(gè)例子,比如說我們有一個(gè)函數(shù)來計(jì)算坐標(biāo)到原點(diǎn)的距離:

include<cmath>

double distance(double x, double y) {
    return sqrt(x * x + y * y);
}

double x = 3.0, y = 4.0;
double d = distance(x, y);

當(dāng)我們使用了內(nèi)聯(lián)函數(shù)之后,它相當(dāng)于把函數(shù)的代碼拷貝了一份粘貼到了調(diào)用的位置:

double x = 3.0, y = 4.0;
double d = sqrt(x * x + y * y);

這也就是內(nèi)聯(lián)的含義,使用了內(nèi)聯(lián)函數(shù)之后,程序無須跳轉(zhuǎn)到另外一個(gè)位置進(jìn)行執(zhí)行,可以節(jié)省掉跳轉(zhuǎn)所帶來的開銷。因此運(yùn)行效率要比普通函數(shù)更快,但代價(jià)是需要占用更多的內(nèi)存。比如我們調(diào)用了10次內(nèi)聯(lián)函數(shù),相當(dāng)于代碼拷貝了十份。

內(nèi)聯(lián)函數(shù)的使用非常簡單,就是在函數(shù)定義之前加上inline關(guān)鍵字。

需要注意的是,有的時(shí)候我們雖然加上了inline關(guān)鍵字但編譯器并不一定會(huì)遵照執(zhí)行。有些編譯器會(huì)有函數(shù)規(guī)模的限制,并且會(huì)限制內(nèi)聯(lián)函數(shù)禁止調(diào)用自己,也就是不能遞歸。

還有一點(diǎn)是內(nèi)聯(lián)函數(shù)雖然有內(nèi)聯(lián)機(jī)制,但是函數(shù)的傳參依然是值傳遞,也就是說會(huì)發(fā)生拷貝,和普通函數(shù)一致。

在C語言當(dāng)中沒有inline特性,C語言是使用宏定義來實(shí)現(xiàn)類似的功能。但宏定義并不是通過參數(shù)傳遞,而是代替機(jī)械替換實(shí)現(xiàn)的。

比如:

#define SQUARE(x) x*x

double a = SQUARE(3.4 + 3.5);

這樣我們得到的結(jié)果會(huì)是3.4 + 3.5 * 3.4 + 3.5,也就是說宏定義只是機(jī)械地替換代碼,并不是函數(shù)式的調(diào)用。所以要實(shí)現(xiàn)類似inline函數(shù)的效果,可以使用括號:

#define SQUARE(x) ((x) * (x))

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

出品 | 公眾號:Coder梁(ID:Coder_LT)

相關(guān)文章

  • 獲取當(dāng)前系統(tǒng)本地時(shí)間,精確到毫秒的實(shí)例

    獲取當(dāng)前系統(tǒng)本地時(shí)間,精確到毫秒的實(shí)例

    下面小編就為大家?guī)硪黄@取當(dāng)前系統(tǒng)本地時(shí)間,精確到毫秒的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • Qt(C++)調(diào)用工業(yè)相機(jī)Basler的SDK使用示例

    Qt(C++)調(diào)用工業(yè)相機(jī)Basler的SDK使用示例

    這篇文章主要介紹了Qt(C++)調(diào)用工業(yè)相機(jī)Basler的SDK使用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • C++this指針詳情

    C++this指針詳情

    這篇文章主要介紹了C++this指針詳情,在 C++ 中,每一個(gè)對象都能通過 this 指針來訪問自己的地址。this 指針是所有成員函數(shù)的隱含參數(shù)。因此,在成員函數(shù)內(nèi)部,它可以用來指向調(diào)用對象,下面我們來了解更多詳細(xì)內(nèi)容吧
    2022-01-01
  • OpenCV識別圖像上的線條軌跡

    OpenCV識別圖像上的線條軌跡

    這篇文章主要為大家詳細(xì)介紹了OpenCV識別圖像上的線條軌跡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語言設(shè)計(jì)一個(gè)閃閃的圣誕樹

    C語言設(shè)計(jì)一個(gè)閃閃的圣誕樹

    本文使用C語言基礎(chǔ)知識在控制臺打印一個(gè)圣誕樹效果,真的很簡單哦,一起通過本文學(xué)習(xí)吧
    2016-12-12
  • C++如何切割String對象的方法

    C++如何切割String對象的方法

    C++相較于Java,Python 并沒有提供的字符串分割的函數(shù)split,因此需要自己進(jìn)行編寫,本文主要介紹了C++如何切割String對象的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 詳解C語言讀取文件求某一列的平均值

    詳解C語言讀取文件求某一列的平均值

    本文粗淺比較了C語言中常用的幾種讀取文件的函數(shù)的效率,并給出了幾段求取某列平均值的代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多度進(jìn)步
    2022-02-02
  • C++實(shí)現(xiàn)歸并排序算法

    C++實(shí)現(xiàn)歸并排序算法

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)歸并排序算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • 基于C++類型重定義的使用詳解

    基于C++類型重定義的使用詳解

    本篇文章是對C++中類型重定義的使用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++實(shí)現(xiàn)鬧鐘程序的方法

    C++實(shí)現(xiàn)鬧鐘程序的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)鬧鐘程序的方法,比較實(shí)用的功能,需要的朋友可以參考下
    2014-08-08

最新評論

体育| 竹山县| 安顺市| 岗巴县| 仁化县| 新泰市| 兰州市| 浮山县| 绵阳市| 牡丹江市| 鸡东县| 庄浪县| 剑河县| 宁化县| 石林| 公安县| 岳普湖县| 南郑县| 萍乡市| 措勤县| 玛沁县| 新河县| 丽水市| 双柏县| 扶风县| 宜川县| 惠来县| 府谷县| 东安县| 治多县| 通许县| 夏邑县| 鄱阳县| 凤山县| 濮阳市| 察哈| 华阴市| 竹溪县| 麟游县| 松阳县| 和政县|