速度是有代價的,inline和宏都是用空間換時間。
站在用戶的角度思考問題,與客戶深入溝通,找到青州網(wǎng)站設計與青州網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設計、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、網(wǎng)絡空間、企業(yè)郵箱。業(yè)務覆蓋青州地區(qū)。
使用內(nèi)聯(lián)函數(shù)的時候要注意:
1.遞歸函數(shù)不能定義為內(nèi)聯(lián)函數(shù)
2.內(nèi)聯(lián)函數(shù)一般適合于不存在while和switch等復雜的結(jié)構(gòu)且只有1~5條語句的小函數(shù)上,否則編譯系統(tǒng)將該函數(shù)視為普通函數(shù)。
3.內(nèi)聯(lián)函數(shù)只能先定義后使用,否則編譯系統(tǒng)也會把它認為是普通函數(shù)。
4.對內(nèi)聯(lián)函數(shù)不能進行異常的接口聲明。
內(nèi)聯(lián)函數(shù)可減少cpu的系統(tǒng)開銷,并且程序的整體速度將加快,但當內(nèi)聯(lián)函數(shù)很大時,會有相反的作用,因此一般比較小的函數(shù)才使用內(nèi)聯(lián)函數(shù)。
內(nèi)聯(lián)函數(shù)是C++的增強特性之一,用來降低程序的運行時間。當內(nèi)聯(lián)函數(shù)收到編譯器的指示時,即可發(fā)生內(nèi)聯(lián):編譯器將使用函數(shù)的定義體來替代函數(shù)調(diào)用語句,這種替代行為發(fā)生在編譯階段而非程序運行階段。
值得注意的是,內(nèi)聯(lián)函數(shù)僅僅是對編譯器的內(nèi)聯(lián)建議,編譯器是否覺得采取你的建議取決于函數(shù)是否符合內(nèi)聯(lián)的有利條件。如何函數(shù)體非常大,那么編譯器將忽略函數(shù)的內(nèi)聯(lián)聲明,而將內(nèi)聯(lián)函數(shù)作為普通函數(shù)處理。
內(nèi)聯(lián)函數(shù)具有一般函數(shù)的特性,它與一般函數(shù)所不同之處公在于函數(shù)調(diào)用的處理。一般函數(shù)進行調(diào)用時,要將程序執(zhí)行權轉(zhuǎn)到被調(diào)用函數(shù)中,然后再返回到調(diào)用它的函數(shù)中;而內(nèi)聯(lián)函數(shù)在調(diào)用時,是將調(diào)用表達式用內(nèi)聯(lián)函數(shù)體來替換。在使用內(nèi)聯(lián)函數(shù)時,應注意如下幾點:
1、類內(nèi)定義的函數(shù)是內(nèi)聯(lián)函數(shù),類外定義的函數(shù)是非內(nèi)聯(lián)函數(shù)(短函數(shù)可以定義在類內(nèi),長函數(shù)可以定義在類外)。
2、可以為類外定義的函數(shù)指定 inline 關鍵字,強行為內(nèi)聯(lián)函數(shù)。
3、在內(nèi)聯(lián)函數(shù)內(nèi)不允許用循環(huán)語句和開關語句。
4、內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次被調(diào)用之前。
1.內(nèi)聯(lián)函數(shù)可減少cpu的系統(tǒng)開銷,并且程序的整體速度將加快,但當內(nèi)聯(lián)函數(shù)很大時,會有相反的作用,因此一般比較小的函數(shù)才使用內(nèi)聯(lián)函數(shù).
2.有兩種內(nèi)聯(lián)函數(shù)的聲明方法,一種是在函數(shù)前使用inline關見字,另一種是在類的內(nèi)部定義函數(shù)的代碼,這樣的函數(shù)將自動轉(zhuǎn)換為內(nèi)聯(lián)函數(shù),而且沒必要將inline放在函數(shù)前面.
3.內(nèi)聯(lián)是一種對編譯器的請求,下面這些情況會阻止編譯器服從這項請求.
如果函數(shù)中包含有循環(huán),switch或goto語句,遞歸函數(shù),含有static的函數(shù).
由此可以看出,內(nèi)聯(lián)函數(shù)和成員函數(shù)沒什么區(qū)別,區(qū)別就在于怎樣加快函數(shù)的執(zhí)行速度而已。
引入內(nèi)聯(lián)函數(shù)的目的是為了解決程序中函數(shù)調(diào)用的效率問題。
函數(shù)是一種更高級的抽象。它的引入使得編程者只關心函數(shù)的功能和使用方法,而不必關心函數(shù)功能的具體實現(xiàn);函數(shù)的引入可以減少程序的目標代碼,實現(xiàn)程序代碼和數(shù)據(jù)的共享。但是,函數(shù)調(diào)用也會帶來降低效率的問題,因為調(diào)用函數(shù)實際上將程序執(zhí)行順序轉(zhuǎn)移到函數(shù)所存放在內(nèi)存中某個地址,將函數(shù)的程序內(nèi)容執(zhí)行完后,再返回到轉(zhuǎn)去執(zhí)行該函數(shù)前的地方。這種轉(zhuǎn)移操作要求在轉(zhuǎn)去前要保護現(xiàn)場并記憶執(zhí)行的地址,轉(zhuǎn)回后先要恢復現(xiàn)場,并按原來保存地址繼續(xù)執(zhí)行。因此,函數(shù)調(diào)用要有一定的時間和空間方面的開銷,于是將影響其效率。特別是對于一些函數(shù)體代碼不是很大,但又頻繁地被調(diào)用的函數(shù)來講,解決其效率問題更為重要。引入內(nèi)聯(lián)函數(shù)實際上就是為了解決這一問題。
在程序編譯時,編譯器將程序中出現(xiàn)的內(nèi)聯(lián)函數(shù)的調(diào)用表達式用內(nèi)聯(lián)函數(shù)的函數(shù)體來進行替換。顯然,這種做法不會產(chǎn)生轉(zhuǎn)去轉(zhuǎn)回的問題,但是由于在編譯時將函數(shù)休中的代碼被替代到程序中,因此會增加目標程序代碼量,進而增加空間開銷,而在時間代銷上不象函數(shù)調(diào)用時那么大,可見它是以目標代碼的增加為代價來換取時間的節(jié)省。
本文名稱:c語言中內(nèi)聯(lián)函數(shù)節(jié)省時間,c++內(nèi)置函數(shù)和內(nèi)聯(lián)函數(shù)
當前URL:http://chinadenli.net/article10/dsshjgo.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設、面包屑導航、App設計、動態(tài)網(wǎng)站、標簽優(yōu)化、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)