您好,登錄后才能下訂單哦!
內聯函數和普通函數的區別:
普通函數在內存上只有一份,任何地方在調用她的時候分3步:
①:找出這個函數
②:執行此內聯函數
③:返回結果(可以是void),結束此函數,繼續執行此函數下面的代碼
但是內聯函數的調用步驟和不同函數是以一樣的 , 因為他在編譯的時候就不一樣:
如何編譯:
如果此函數是內聯函數,那么在編譯的時候,只要是此函數被調用的地方,編譯器都會copy一份此函數放入這個地方。所以,內聯函數的執行,就沒有不同函數那么多的步驟,直接就執行了。
這樣的好處是效率是比較高的,調用的地方多了 , 那么copy的次數也多,那樣占用的內存也多。
來一個簡單的內聯:
#include <iostream> using namespace std; inline void fun1() { cout << "這是內聯函數" << endl; } int main() { fun1(); return 0; }
解析:
申明內聯函數需要用到關鍵字 : inline
另外需要注意的地方:
①:函數申明(有申明)以及其實現都需要使用inline關鍵字
#include <iostream> using namespace std; inline void fun1(); inline void fun1() { cout << "這是內聯函數" << endl; } int main() { fun1(); return 0; }
②:類內定義-類外實現都需要使用inline關鍵字
#include <iostream> using namespace std; class InlineC { public: inline void fun(); }; inline void InlineC::fun() { cout << "這是內聯函數" << endl; } int main() { InlineC *in = new InlineC; in->fun(); delete in; return 0; }
內聯函數和宏相似,都是copy,但是他比宏要安全
舉個例子:
#include <iostream> using namespace std; #define SUM(x) x*x class InlineC { public: inline void fun(); }; inline void InlineC::fun() { cout << "這是內聯函數" << endl; } int main() { InlineC *in = new InlineC; in->fun(); delete in; cout << "--------------------------------------" << endl; cout << SUM(1+3) << endl; return 0; }
結果:
并沒有得到結果 16 。
宏的嚴謹性沒inline高。
最后 , 一個默認 : 把inline的申明及實現寫在head里面。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。