在c++的幾個令人興奮的概念中,內聯函數在涉及到程序性能時被證明是非常有用的。在使函數成為內聯函數之前,掌握內聯函數的知識是非常必要的。廢話不多說,讓我們直接進入我們的話題吧!
c++中的內聯函數
c++中的內聯函數是一種優化特性,可以減少程序的執行時間,就像我們所做的那樣宏在c++中,內聯函數的概念是在處理類時使用的。不過,它也可以用於其他用途。每當遇到這樣的函數時,編譯器就用該函數代碼的副本替換它(函數定義)。換句話說,可以說這樣的函數是內聯展開的,因此被命名為內聯函數.
內聯函數通常用於函數定義較小,並且函數在程序中被多次調用的情況。使用內聯函數可以節省將程序的控製權從調用函數轉移到被調用函數定義的時間。
然而,內聯函數隻是對編譯器的請求或建議,而不是任何強製命令。這取決於編譯器是否接受或拒絕這種內聯特定函數的建議。編譯器很可能不考慮函數的內聯在某些情況下,這裏提到如下-
- 當帶有return語句的函數沒有返回任何值並標記為內聯時,編譯器不會響應程序員將其設置為內聯函數的請求。
- 當程序員試圖內聯包含循環(for、while或do-while)的函數時,編譯器拒絕內聯建議。
- 當一個函數是遞歸的,它不能內聯。
- 包含靜態變量的函數不能成為內聯函數。
- 如果函數包含任何switch或go-to語句,編譯器將拒絕對函數進行內聯的請求。
定義內聯函數的語法如下所示:
Inline return-type function-name(parameters){//函數代碼} |
內聯函數的例子
在c++中,為了使函數內聯,關鍵字"內聯使用。下麵是一個解釋內聯函數實現的c++代碼示例:
#include使用命名空間std;inline int add(int a, int b) //內聯函數定義{返回a+b;} int main() {cout<<" 562和451相加得到的值:"<
這裏,內聯函數add(int a, int b)是在main()函數之前定義的,後來在main()函數內部被調用。當調用add函數時,add函數定義的代碼被放置在那裏,即在編譯時內聯。因此,它節省了函數調用和返回的開銷。內聯函數add(a,b)的工作原理如下所示:
# include < iostream > 使用命名空間std; Inline int add(int a, int b) { 返回一個+ b: } int main () { cout << " 562和451相加得到的值:" << add(562,451) << " \n "; 返回0; } |
編譯 |
## include < iostream > 使用命名空間std; Inline int add(int a, int b) { 返回一個+ b; } int main () { cout << " 562+451相加得到的值是:" << 562+451 << " \n "; 返回0; } |
如果必須顯式地在c++中的類中聲明內聯函數,那麼在類內部聲明函數並在類外部使用inline關鍵字定義它是唯一的要求。但是,內聯函數也可以在類中定義。下麵是一個c++代碼示例,幫助您在處理類時更好地實現內聯函數。
inline int A::add(int A, int b)//內聯函數定義{返回(A >b)?} class A {public: inline int max(int A, int b)//帶有定義的內聯函數聲明{return (A >b)?};} class A {public: int max(int A, int b);//內聯函數聲明}
在編譯時,上麵例子中的內聯函數max(a,b)的工作方式與前麵例子中的內聯函數add(a,b)相同。
使用內聯函數的優點
內聯函數是c++提供的一個非常有用的特性,因為它有下麵列出的幾個優點。
- 沒有函數調用開銷;從而提高了程序的速度。
- 它有助於節省函數返回調用的開銷。
- 在調用函數時很有用,可以節省堆棧上的變量push/pop的開銷。
- 指令緩存的利用增加了引用的局部性。
- 內聯函數產生的代碼通常比函數調用的序文和返回的代碼要少,因此對於小型嵌入式係統非常有用。
內聯函數的缺點
編程語言中任何可靠的特性都有其自身的缺點,c++的內聯函數也是如此。現在讓我們看看內聯函數的缺點!
- 由於代碼擴展,二進製可執行程序的大小增加了。
- 內聯函數代碼中的任何更改都需要重新編譯程序以確保更新。
- 由於可執行文件大小的增加,頁麵錯誤的增加導致程序性能變差。
- 對於具有大量可執行代碼的係統,其函數的調用和返回開銷時間與它們的整個執行時間相比可以忽略不計。但是,內聯這樣一個程序的功能會降低係統的速度。因此,它可能並不總是一個好的選擇,就像在大型嵌入式係統的情況下,它更喜歡高速而不是相當大的可執行文件大小。
要記住的幾點
作為對c++中內聯函數的整個主題的概述,下麵是在使用c++語言時必須記住的關於內聯函數的幾個要點。
- 內聯函數隻是建議,而不是強製。編譯器可能沒有內聯程序員標記為內聯的函數。同時,編譯器可以決定內聯函數,即使它沒有被標記為內聯。
- 在類中聲明和定義的函數不需要顯式地定義為內聯函數,因為默認情況下它們已經被視為內聯函數。
- 與預處理器宏不同,Inline易於調試,並且不會破壞命名空間和代碼,因為它表現為編譯器控製的複製和粘貼操作,而不是強製實現。
- 除了編譯器知道對象類型的情況外,即當對象在同一個函數體中聲明和構造時,虛方法不能內聯。
- 在頭部分中作為模板使用的方法或函數的存在不會使其自動內聯。
這篇關於c++中的內聯函數的文章到此結束。希望這能幫助你提高你的c++技能。要了解更多關於編程和其他相關概念的知識,請查看關於beplay2018官网卓越學習學院.
另外,如果你正在準備麵試,看看這些c++的麵試問題像專業人士一樣拿高分。