c 內聯函式

2021-08-22 16:14:27 字數 1093 閱讀 1212

內聯函式inline:

引入內聯函式的目的是為了解決程式中函式呼叫的效率問題,這麼說吧,程式在編譯器編譯的時候,編譯器將程式中出現的內聯函式的呼叫表示式用內聯函式的函式體進行替換,而對於其他的函式,都是在執行時候才被替代。這其實就是個空間代價換時間的節省。所以內聯函式一般都是不超過10行的小函式。

乙個函式是內聯的,那麼在編譯時,編譯器會把該函式的**副本放置在每個呼叫該函式的地方。對內聯函式進行任何修改,都需要重新編譯函式的所有客戶端,因為編譯器需要重新更換一次所有的**,否則將會繼續使用舊的函式。如果想把乙個函式定義為內聯函式,則需要在函式名前面放置關鍵字inline,在呼叫函式之前需要對函式進行定義。如果已定義的函式多於一行,編譯器會忽略 inline 限定符。

c++內聯函式通常與類一起使用。

在類定義中的定義的函式都是內聯函式,即使沒有使用inline說明符。

幾點tips:

當函式被宣告為內聯函式之後, 編譯器會將其內聯展開, 而不是按通常的函式呼叫機制進行呼叫.

優點: 當函式體比較小的時候, 內聯該函式可以令目標**更加高效. 對於訪問函式以及其它函式體比較短, 效能關鍵的函式, 鼓勵使用內聯.

缺點: 濫用內聯將導致程式變慢. 內聯可能使目標**量或增或減, 這取決於內聯函式的大小. 內聯非常短小的訪問函式通常會減少**大小, 但內聯乙個相當大的函式將戲劇性的增加**大小. 現代處理器由於更好的利用了指令快取, 小巧的**往往執行更快。

結論: 不要內聯超過 10 行的函式. 謹慎對待析構函式, 析構函式往往比其表面看起來要更長, 因為有隱含的成員和基類析構函式被呼叫!

內聯那些包含迴圈或 switch 語句的函式常常是得不償失 (除非在大多數情況下, 這些迴圈或 switch 語句從不被執行.

有些函式即使宣告為內聯的也不一定會被編譯器內聯, 這點很重要; 比如虛函式和遞迴函式就不會被正常內聯. 通常, 遞迴函式不應該宣告成內聯函式.(遞迴呼叫堆疊的展開並不像迴圈那麼簡單, 比如遞迴層數在編譯時可能是未知的, 大多數編譯器都不支援內聯遞迴函式). 虛函式內聯的主要原因則是想把它的函式體放在類定義內, 為了圖個方便, 抑或是當作文件描述其行為, 比如精短的訪問函式.

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出現時,巨集就會歪曲我們的意思...