在c++中,inline函式,即內聯函式,是在函式實現的返回值前面加入關鍵字inline。
下面集中情況下,函式foo為內聯函式:
(1)inline void foo(int x); // inline 與函式宣告和函式實現放在一起
inline void foo(int x){}
(2)void foo(int x); //inline 僅與函式實現放在一起
inline void foo(int x){}
(3)定義在類宣告之中的成員函式將自動地成為內聯函式
class a
public:
void foo(int x) {} // 自動地成為內聯函式
注意,inline關鍵字僅與函式宣告放在一起是不能成為內聯函式的。一般推薦第二種寫法,因為這體現了高質量c++/c 程式設計風格的乙個基本原則:宣告與定義不可混為一談,使用者沒有必要、也不應該知道函式是否需要內聯。
那為什麼要使用內聯函式呢?
內聯能提高函式的執行效率。內聯函式在編譯階段,編譯器會將內聯是以**膨脹(複製)為代價,僅僅省去了函式呼叫的開銷,從而提高函式的執行效率。如果執行函式體內**的時間,相比於函式呼叫的開銷較大,那麼效率的收穫會很少。另一方面,每一處內聯函式的呼叫都要複製**,將使程式的總**量增大,消耗更多的記憶體空間。
inline函式的總結
內聯說明對於編譯器僅僅是乙個建議,編譯器可以忽略這個建議 下面沒有加lnline的時候,機器進行編譯操作 一般的函式呼叫,進行壓棧操作,導致系統開銷加大,花費了更多時間。下面是加了inline的程式設計 用inline修飾的函式,在編譯時會在呼叫的內聯函式地方展開,沒有壓棧開銷。以空間為代價,提高了...
inline函式使用容易導致出錯的問題
對於inline函式,首先應該要短小 inline只是對編譯器的乙個建議,編譯器是可以忽略的 其次inline函式的定義一定要與呼叫它的部分在同乙個原始檔裡,不同的原始檔可以分別定義乙個相同inline函式,內容都可以不同 不違反重複定義原則 但是這樣做會引起程式呼叫的不確定性,應該避免這種情況。為...
gcc的大坑,inline函式
為什麼說inline函式是gcc的乙個大坑呢?因為對inline的處理,它做了c99標準之外的東西,雖然更方便了,但是埋下了相容性的隱患。我偶然想用icc編譯以前的 發現鏈結不能通過,引用乙個inline函式提示未定義。網上有篇日誌講的很詳細 gcc中的inline關鍵字 沒時間細看 具體的現象是 ...