激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - C++內(nèi)聯(lián)函數(shù)詳情

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

2022-02-23 14:10梁唐 C/C++

這篇文章主要介紹了C++內(nèi)聯(lián)函數(shù),文章主要圍繞C++內(nèi)聯(lián)函數(shù)的相關(guān)資料展開詳細(xì)內(nèi)容,需要的朋友可以參考一下,希望對大家有所幫助

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

內(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)的距離:

?
1
2
3
4
5
6
7
8
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)用的位置:

?
1
2
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)的。

比如:

?
1
2
3
#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ù)的效果,可以使用括號:

?
1
#define SQUARE(x) ((x) * (x))

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品在线视频播放 | 在线影院av| 国产一级一片免费播放 | 久久久三区 | 嗯~啊~弄嗯~啊h高潮视频 | 视频一区国产 | 久久人操| a集毛片 | 成人黄色免费网站 | 羞羞答答视频 | 国产精品久久久久久久不卡 | 免费观看欧美一级片 | 欧美一级高清免费 | 国产人成精品综合欧美成人 | 欧美极品欧美精品欧美视频 | 欧美成人激情在线 | av在线免费观看网站 | 亚洲一区久久 | 国内久久久久 | 欧美成人视| 99精品国产一区二区三区 | 美国黄色小视频 | 在线天堂中文在线资源网 | 国产精品.com | 国产伦精品一区二区三区 | 素人视频在线观看免费 | 男女一边摸一边做羞羞视频免费 | 一区二区三区四区国产精品视频 | 久国产精品| 国产三级午夜理伦三级 | 亚洲日韩精品欧美一区二区 | 欧美国产一区二区三区激情无套 | 万圣街在线观看免费完整版 | 在线播放免费视频 | 成人精品aaaa网站 | 最新欧美精品一区二区三区 | 天天干导航 | 免费一级欧美大片视频在线 | 久久免费毛片 | 日韩中字在线 | 少妇色诱麻豆色哟哟 |