C++簡(jiǎn)明分析inline函數(shù)的使用
inline函數(shù)
當(dāng)程序執(zhí)行函數(shù)調(diào)用時(shí),系統(tǒng)要建立??臻g,保護(hù)現(xiàn)場(chǎng),傳遞參數(shù)以及控制程序執(zhí)行的轉(zhuǎn)移等等,
這些工作需要系統(tǒng)時(shí)間和空間的開(kāi)銷(xiāo)。
請(qǐng)看如下程序段,讀入一行字符串,逐個(gè)判斷是否為數(shù)字字符:
#include<iostream> using namespace std; bool IsNumber(char ch) { return ch>= ?0? && ch <= ?9? ? 1 : 0; } int main() { char ch; while(cin.get(ch), ch!= ? n?) { if (IsNumber(ch)) { cout<<′′是數(shù)字字符 ′′<<endl; } else { cout<<′′不是數(shù)字字符 ′′<<endl; } } return 0; }
當(dāng)函數(shù)功能簡(jiǎn)單,使用頻率很高,為了提高效率,直接將函數(shù)的代碼嵌入到程序中。但這個(gè)辦法有缺點(diǎn),一是相同代碼重復(fù)書(shū)寫(xiě),二是程序可讀性往往沒(méi)有使用函數(shù)的好。
為了協(xié)調(diào)好效率和可讀性之間的矛盾,C++提供了另一種方法,即定義內(nèi)聯(lián)函數(shù),方法是在定義函
數(shù)時(shí)用修飾詞inline
inline bool IsNumber(char ch) { return ch>='0'&&ch<='9'?1:0; }
加inline關(guān)鍵字將其改成內(nèi)聯(lián)函數(shù),在編譯期間編譯器能夠在調(diào)用點(diǎn)內(nèi)聯(lián)展開(kāi)該函數(shù)。
實(shí)例
在debug模式下,設(shè)置編譯器。
要點(diǎn)
inline是一種以空間換時(shí)間的做法,省去調(diào)用函數(shù)額開(kāi)銷(xiāo)。但當(dāng)函數(shù)體的代碼過(guò)長(zhǎng)或者是遞歸函數(shù)即便加上inline關(guān)鍵字,也不會(huì)在調(diào)用點(diǎn)以?xún)?nèi)聯(lián)展開(kāi)該函數(shù)。
inline對(duì)于編譯器而言只是一個(gè)建議,編譯器會(huì)自動(dòng)優(yōu)化。
inline不建議聲明和定義分離,分離會(huì)導(dǎo)致鏈接錯(cuò)誤。因?yàn)閕nline被展開(kāi),就沒(méi)有函數(shù)地址了,鏈接就會(huì)找不到。
建議
如果函數(shù)的執(zhí)行開(kāi)銷(xiāo)小于開(kāi)棧清棧開(kāi)銷(xiāo)(函數(shù)體較小 ),使用inline處理效率高。如果函數(shù)的執(zhí)行開(kāi)
銷(xiāo)大于開(kāi)棧清棧開(kāi)銷(xiāo),使用普通函數(shù)方式處理。
到此這篇關(guān)于C++簡(jiǎn)明分析inline函數(shù)的使用的文章就介紹到這了,更多相關(guān)C++ inline函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語(yǔ)言一看就懂的選擇與循環(huán)語(yǔ)句及函數(shù)介紹
函數(shù)是一個(gè)功能模塊,它把實(shí)現(xiàn)某個(gè)功能的代碼塊包含起來(lái),并起一個(gè)函數(shù)名,供別人調(diào)用,如printf函數(shù),如system函數(shù)。是程序運(yùn)行當(dāng)中包裝起來(lái)的一個(gè)步驟;選擇與循環(huán)是編程中最常用的結(jié)構(gòu),本篇文章用最簡(jiǎn)單的文字帶你了解它們2022-04-04C++編程中私有和保護(hù)以及公有的類(lèi)成員訪問(wèn)控制
這篇文章主要介紹了C++編程中私有和保護(hù)以及公有的類(lèi)成員訪問(wèn)控制,即private和protected以及public關(guān)鍵字的相關(guān)作用和用法,需要的朋友可以參考下2016-01-01C語(yǔ)言修煉之路一朝函數(shù)思習(xí)得?模塊思維世間生下篇
函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語(yǔ)句。每個(gè)?C?程序都至少有一個(gè)函數(shù),即主函數(shù)?main()?,所有簡(jiǎn)單的程序都可以定義其他額外的函數(shù)2022-03-03C++實(shí)現(xiàn)圖書(shū)館系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)圖書(shū)館系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Microsoft Visual C++ 6.0開(kāi)發(fā)環(huán)境搭建教程
這篇文章主要為大家詳細(xì)介紹了Microsoft Visual C++ 6.0開(kāi)發(fā)環(huán)境搭建教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04對(duì)比C語(yǔ)言中execv相關(guān)的執(zhí)行文件的三個(gè)函數(shù)
這篇文章主要介紹了對(duì)比C語(yǔ)言中execv相關(guān)的執(zhí)行文件的三個(gè)函數(shù),分別為execv()函數(shù)和execve()函數(shù)以及execvp()函數(shù),需要的朋友可以參考下2015-08-08