回答
當編譯器內聯展開一個函數調用,該函數的代碼 被插入到呼叫者的碼流(概念上類似於 與#define宏會發生什麼)。這可以取決於其他事情,提高性能,因爲優化器可以在程序上集成被調用代碼 - 優化被調用代碼到調用者的 中。
有幾種方法可以指定一個函數是內聯的,其中一些涉及inline關鍵字,另一些則不涉及inline關鍵字。無論您如何將內聯函數指定爲函數,它都是允許編譯器 忽略的請求:它可能會內聯地擴展某些內聯函數的一部分或全部或不包含任何 調用。 (不要灰心,如果看起來 絕望模糊,上面的靈活性實際上是一個巨大的優勢:它允許編譯器處理大的函數與小的函數不同 ,再加上它允許編譯器生成易於使用的代碼 如果選擇正確的編譯器選項,則調試。)
在最簡單的情況下,內聯函數被放入其調用站點,就像您將其複製並粘貼到那裏一樣。因此,對於,
inline int madd(int a, int b, int c)
{
return a * b + c;
}
void foo(int data[3])
{
int result = madd(data[0], data[1], data[2]);
printf("%d\n", result); // note to pedants: this is simpler than a cout stream, so there
}
的編譯器可以把它變成
void foo(int data[3])
{
int result = data[0] * data[1] + data[2] ; // madd is replaced inline
printf("%d\n", result);
}
直列是編譯器的建議。如果編譯器可以在執行其他優化時執行此操作,它將內聯該函數,這意味着它會將函數內容「內聯」在調用位置,從而避免創建堆棧和調用開銷。但是,如上所述,這是一個建議,編譯器不需要這樣做
通過內聯函數,我們可以避免函數開銷,我們也可以節省執行時間。
Example: inline mul (int a, int b)
{
int multi;
multi = a * b;
}
通過這一點,我們能夠避免功能的開銷(指存儲在堆棧推&彈出操作中的PC)
通過聲明一個函數內聯,則該函數被替換爲它定義直接其中它被稱爲。它節省了執行時間,因爲一般的方法調用通常包括對該函數的控制傳輸,並以不同的方式爲該執行提供內存。
通過執行內聯,函數以內聯方式執行,從而將控制轉移移除到該函數的主體。
通常,函數通過在其聲明中在其返回類型之前添加關鍵字inline來進行內聯。
+ 1,只記得「函數在C++中,方法在java中」 – nobalG
- 1. Javascript調用函數或內聯代碼?
- 2. 用C++替換內聯彙編代碼
- 3. 如何用JavaScript的內置函數替換此JQuery Ajax調用?
- 4. 替換內聯彙編代碼
- 5. 函數替換不在html代碼
- 6. 用getJSON調用替換內聯JSON
- 7. 如何替換的onclick函數調用我的函數調用
- 8. 函數``preg_match()`函數在下面的代碼中如何替換`eregi()`函數?
- 9. 如何用偶數位置(和奇數位置)替換字符
- 10. 從內聯代碼調用JavaScript函數aspx
- 11. Linux內核路由器代碼替換MAC地址的位置
- 12. jQuery - 調用內聯函數
- 13. 如何替換位置++代碼使其與Swift 3兼容?
- 14. 如何從我的wordpress代碼替換棄用的函數?
- 15. 如何使用內聯函數調用在wordpress中調用javascript函數?
- 16. 如何用內置的TSQL函數替換IS NULL和!=?
- 17. 內聯函數代碼不能編譯
- 18. Node.JS令牌替換(相當於在ASP.NET中調用內聯函數)
- 19. 正則表達式:用BB代碼替換內聯CSS
- 20. 內聯代碼比Java中的函數調用/靜態函數更慢
- 21. 內聯函數調用靜態內聯函數
- 22. 內置php函數的源代碼位於何處?
- 23. 如何內聯asp.net代碼?
- 24. 如何將DataBinding內聯代碼放入內聯C#代碼中?
- 25. 用一些其他算法替換setInterval調用內置調用函數
- 26. CURL替代內置的「file_get_contents()」函數
- 27. 如何調用PHP代碼JavaScript函數
- 28. 如何在函數內調用函數?
- 29. 如何將__asm jno no_oflow替換爲VS2008 64位版本中的內置函數?
- 30. 替代在C#中內聯?
或者它可以完全忽略「內聯」指令。編譯器是這樣反覆無常的。 – Crashworks
'inline'指令不能被完全忽略(因爲它指定了函數的不同ODR行爲)。然而,是否內聯代碼的決定可以獨立於是否存在「內聯」指令。 –