您好,登錄后才能下訂單哦!
這篇文章主要介紹C++中的內(nèi)聯(lián)函數(shù)是什么,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
以inline修飾的函數(shù)叫做內(nèi)聯(lián)函數(shù),編譯時C++編譯器會在調(diào)用內(nèi)聯(lián)函數(shù)的地方展開,沒有函數(shù)壓棧的開銷,內(nèi)聯(lián)函數(shù)提升程序運行的效率。
我們先來看一下普通的函數(shù):
#include <iostream> using namespace std; int Add(int left, int right) { return left + right; } int main() { Add(1, 2); return 0; }
在匯編代碼我們可以看出函數(shù)調(diào)用和壓棧:
我們在加inline 試試看:
#include <iostream> using namespace std; inline int Add(int left, int right) { return left + right; } int main() { Add(1, 2); return 0; }
反匯編:
發(fā)現(xiàn)還是一樣,為什么呢?
在debug版本下編譯器不會將內(nèi)聯(lián)函數(shù)展開,因為展開就調(diào)試不了.
我們需要設置一下屬性:(vs2019)
首先我們打開屬性面板:
接下來進行調(diào)試:
沒有函數(shù)的調(diào)用!!
反匯編:
1.inline是一種以空間換時間的做法,省去調(diào)用函數(shù)額開銷。所以代碼很長或者有循環(huán)/遞歸的函數(shù)不適宜使用作為內(nèi)聯(lián)函數(shù)。
2.inline對于編譯器而言只是一個建議,編譯器會自動優(yōu)化,如果定義為inline的函數(shù)體內(nèi)有循環(huán)/遞歸等等,編譯器優(yōu)化時會忽略掉內(nèi)聯(lián)。
3. inline不建議聲明和定義分離,分離會導致鏈接錯誤。因為inline被展開,就沒有函數(shù)地址了,鏈接就會找不到。
4.可以代替宏定義函數(shù).
以上是“C++中的內(nèi)聯(lián)函數(shù)是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。