C++簡明分析inline函數(shù)的使用
inline函數(shù)
當(dāng)程序執(zhí)行函數(shù)調(diào)用時(shí),系統(tǒng)要建立??臻g,保護(hù)現(xiàn)場,傳遞參數(shù)以及控制程序執(zhí)行的轉(zhuǎn)移等等,
這些工作需要系統(tǒng)時(shí)間和空間的開銷。
請(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ù)功能簡單,使用頻率很高,為了提高效率,直接將函數(shù)的代碼嵌入到程序中。但這個(gè)辦法有缺點(diǎn),一是相同代碼重復(fù)書寫,二是程序可讀性往往沒有使用函數(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)展開該函數(shù)。
實(shí)例
在debug模式下,設(shè)置編譯器。



要點(diǎn)
inline是一種以空間換時(shí)間的做法,省去調(diào)用函數(shù)額開銷。但當(dāng)函數(shù)體的代碼過長或者是遞歸函數(shù)即便加上inline關(guān)鍵字,也不會(huì)在調(diào)用點(diǎn)以內(nèi)聯(lián)展開該函數(shù)。
inline對(duì)于編譯器而言只是一個(gè)建議,編譯器會(huì)自動(dòng)優(yōu)化。
inline不建議聲明和定義分離,分離會(huì)導(dǎo)致鏈接錯(cuò)誤。因?yàn)閕nline被展開,就沒有函數(shù)地址了,鏈接就會(huì)找不到。
建議
如果函數(shù)的執(zhí)行開銷小于開棧清棧開銷(函數(shù)體較小 ),使用inline處理效率高。如果函數(shù)的執(zhí)行開
銷大于開棧清棧開銷,使用普通函數(shù)方式處理。
到此這篇關(guān)于C++簡明分析inline函數(shù)的使用的文章就介紹到這了,更多相關(guān)C++ inline函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入理解C++中的new/delete和malloc/free動(dòng)態(tài)內(nèi)存管理及區(qū)別介紹
這篇文章主要介紹了深入理解C++中的new/delete和malloc/free動(dòng)態(tài)內(nèi)存管理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
C++實(shí)現(xiàn)LeetCode(79.詞語搜索)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(79.詞語搜索),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++結(jié)構(gòu)體與類指針知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理了關(guān)于C++結(jié)構(gòu)體與類指針知識(shí)點(diǎn)以及相關(guān)內(nèi)容,有興趣的朋友們參考學(xué)習(xí)下。2019-09-09
Cocos2d-x學(xué)習(xí)筆記之開發(fā)環(huán)境搭建
這篇文章主要介紹了Cocos2d-x學(xué)習(xí)筆記之開發(fā)環(huán)境搭建,本文使用Visual Studio作為開發(fā)IDE,是不同于其它教程的,需要的朋友可以參考下2014-09-09

