內聯函式(C )

2021-08-27 21:06:10 字數 940 閱讀 5243

內聯函式是c++為提高程式執行速度所做的一項改進。常規函式和內聯函式之間的主要區別不在於編寫方式,而在於c++編譯器如何將它們組合到程式中。

常規函式呼叫使程式跳到另乙個位址(函式的位址),並在函式結束時返回。

c++內聯函式的編譯**與其他程式**「內聯」起來,也就是說,編譯器將使用相應的函式**代替函式呼叫,因此,內聯函式的執行速度比常規函式稍快,但代價是需要占用更多記憶體。

如果執行函式**的時間比處理函式呼叫機制的時間長,則節省的時間將只佔整個過程的很小一部分。如果**執行時間很短,則內聯呼叫就可以節省非內聯呼叫使用的大部分時間。另一方面,由於這個過程相當快,因此儘管節省了該過程的大部分時間,但節省的時間絕對值並不大,除非該函式經常被呼叫。

要使用這項特性,必須採取下述措施之一:

通常的做法是省略原型,將整個定義(即函式頭和所有函式**)放在本應提供原型的地方。

程式設計師請求將函式作為內聯函式時,編譯器並不一定會滿足這種要求。它可能認為該函式過大或注意到函式呼叫了自己(內聯函式不能遞迴),因此不能將其作為內聯函式。

內聯函式和常規函式一樣,也是按值來傳遞引數的。

inline工具是c++新增的特性。c語言使用預處理器語句#define來提供巨集——內聯**的原始實現。例如:

#define square(x) x*x
這並不是通過傳遞引數實現的,而是通過文字替換來實現的——x是「引數」的符號標記。

a = square(5.0);

b = square(4.5 + 7.5);

d = square(c++);

其中上述三個表示式只有第乙個能正常工作。

b可以被轉換為 b=4.5+7.5*4.5+7.5

而d可以被轉換為d=c++*c++

因此,如果使用c語言的巨集執行了類似函式的功能,應考慮將它們轉換為c++內聯函式。

C 內聯函式

1 什麼是內聯函式?內聯函式就是小型函式,犧牲空間來節省函式呼叫的開銷,一般用作比較小的函式,即函式內部沒有迴圈 開關語句等。內聯函式被發明出來就是為了取代c中的巨集,因為巨集是單純的替換而沒有型別檢查所以經常出毛病,2 為什麼要引入內聯函式?當然,引入內聯函式的主要目的是 解決程式中函式呼叫的效率...

C 內聯函式

1 什麼是內聯函式?2 為什麼要引入內聯函式?3 為什麼inline能取代巨集?4 內聯函式和巨集的區別?5 什麼時候用內聯函式?6 如何使用內聯函式?7 內聯函式的優缺點?8 如何禁止函式進行內聯?9 注意事項 1 什麼是內聯函式?內聯函式是指那些定義在類體內的成員函式,即該函式的函式體放在類體內...

c 內聯函式

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