日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++簡明分析inline函數的使用_C 語言

作者:編程小程 ? 更新時間: 2022-08-23 編程語言

inline函數

當程序執行函數調用時,系統要建立棧空間,保護現場,傳遞參數以及控制程序執行的轉移等等,

這些工作需要系統時間和空間的開銷。

請看如下程序段,讀入一行字符串,逐個判斷是否為數字字符:

#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<<′′是數字字符 ′′<<endl;
}
else
{
cout<<′′不是數字字符 ′′<<endl;
}
}
return 0;
}

當函數功能簡單,使用頻率很高,為了提高效率,直接將函數的代碼嵌入到程序中。但這個辦法有缺點,一是相同代碼重復書寫,二是程序可讀性往往沒有使用函數的好。

為了協調好效率和可讀性之間的矛盾,C++提供了另一種方法,即定義內聯函數,方法是在定義函

數時用修飾詞inline

inline bool IsNumber(char ch)
{
return ch>='0'&&ch<='9'?1:0;
}

加inline關鍵字將其改成內聯函數,在編譯期間編譯器能夠在調用點內聯展開該函數。

實例

在debug模式下,設置編譯器。

要點

inline是一種以空間換時間的做法,省去調用函數額開銷。但當函數體的代碼過長或者是遞歸函數即便加上inline關鍵字,也不會在調用點以內聯展開該函數。

inline對于編譯器而言只是一個建議,編譯器會自動優化。

inline不建議聲明和定義分離,分離會導致鏈接錯誤。因為inline被展開,就沒有函數地址了,鏈接就會找不到。

建議

如果函數的執行開銷小于開棧清棧開銷(函數體較小 ),使用inline處理效率高。如果函數的執行開

銷大于開棧清棧開銷,使用普通函數方式處理。

原文鏈接:https://blog.csdn.net/qq_42795061/article/details/124762442

欄目分類
最近更新