關於內聯函式

2021-07-06 11:18:25 字數 1658 閱讀 1782



內聯函式(inline function與一般的函式不同,不是在呼叫時發生控制轉移,而是在編譯階段將函式體嵌入到每乙個呼叫語句中。

內聯函式(inline function)與編譯器的工作息息相關。編譯器會將程式中出現內聯函式的呼叫表示式用內聯函式的函式體來替換。

cpp**

/***在類裡定義的成員函式會被隱含指定為內建函式

*/#include "stdafx.h"

#include 

#include 

using

namespace std;  

class cstudent  

string name;  

};  

int

main(int

argc,char

* argv)  

/**

*在類裡定義的成員函式會被隱含指定為內建函式

*/#include "stdafx.h"

#include #include using namespace std;

class cstudent

;  inline

void cstudent::display()  

int

main(int

argc,char

* argv)  

/***類外定義的函式用inline指定為內建函式

*/#include "stdafx.h"

#include #include using namespace std;

class cstudent

;inline void cstudent::display()

;  void cstudent::display()  

int

main(int

argc,char

* argv)  

/***無內建函式

*既沒有在類內定義函式,也沒有用inline在類外定義函式

*/#include "stdafx.h"

#include #include using namespace std;

class cstudent

;void cstudent::display()

{ cout<

內聯函式的優點:

首先來看函式呼叫的實質,其實是將程式執行轉移到被呼叫函式所存放的記憶體位址,將函式執行完後,在返回到執行此函式前的地方。這種轉移操作需要保護現場(包括各種函式的引數的進棧操作),在被呼叫函式**執行完後,再恢復現場。但是保護現場和恢復現場需要較大的資源開銷。

特別是對於一些較小的呼叫函式來說(如上邊**中的display()函式),若是頻繁呼叫,函式呼叫過程甚至可能比函式執行過程需要的系統資源更多。所以引入內聯函式,可以讓程式執行效率更高。

內聯函式的缺點:

如果呼叫內聯函式的地方過多,也可能造成**膨脹。畢竟,編譯器會把內聯函式的函式體嵌入到每乙個呼叫了它的地方,重複地嵌入。

關於內聯函式

看c primer時看到一句話 把內聯函式放到標頭檔案中 當時看了後覺的挺奇怪,如果把內聯函式放到標頭檔案中 豈不是在鏈結時要報錯?因為會產生重複定義的錯誤。但是測試了下面的 test.h ifndef test h define test h include inline void print s...

關於c 的內聯函式

1 什麼是內聯函式?內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內。2 為什麼要引入內聯函式?當然,引入內聯函式的主要目的是 解決程式中函式呼叫的效率問題。另外,前面我們講到了巨集,裡面有這麼乙個例子 define abs x x 0?x x 當 i出現時,巨集就會歪曲我們的意思...

mysql 內聯函式 Kotlin內聯函式

內聯函式使用關鍵字內聯宣告,內聯函式的使用增強了高階函式的效能。內聯函式告訴編譯器將引數和函式複製到呼叫站點。虛函式或區域性函式不能宣告為內聯。以下是內聯函式內部不支援的一些表示式和宣告 區域性類宣告 內部巢狀類的宣告 函式表示式 宣告區域性函式 區域性可選引數的預設值 讓我們看一下內聯函式的基本示...