C++的內聯(lián)函數你了解嗎
1.概念
以inline修飾的函數叫做內聯(lián)函數,編譯時C++編譯器會在調用內聯(lián)函數的地方展開,沒有函數壓棧的開銷,內聯(lián)函數提升程序運行的效率。
2.函數演示
我們先來看一下普通的函數:
#include <iostream> using namespace std; int Add(int left, int right) { return left + right; } int main() { Add(1, 2); return 0; }
在匯編代碼我們可以看出函數調用和壓棧:
我們在加inline 試試看:
#include <iostream> using namespace std; inline int Add(int left, int right) { return left + right; } int main() { Add(1, 2); return 0; }
反匯編:
發(fā)現還是一樣,為什么呢?
在debug版本下編譯器不會將內聯(lián)函數展開,因為展開就調試不了.
我們需要設置一下屬性:(vs2019)
首先我們打開屬性面板:
接下來進行調試:
沒有函數的調用!!
反匯編:
3.函數特性
1.inline是一種以空間換時間的做法,省去調用函數額開銷。所以代碼很長或者有循環(huán)/遞歸的函數不適宜使用作為內聯(lián)函數。
2.inline對于編譯器而言只是一個建議,編譯器會自動優(yōu)化,如果定義為inline的函數體內有循環(huán)/遞歸等等,編譯器優(yōu)化時會忽略掉內聯(lián)。
3. inline不建議聲明和定義分離,分離會導致鏈接錯誤。因為inline被展開,就沒有函數地址了,鏈接就會找不到。
4.可以代替宏定義函數.
總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!
相關文章
Qt基礎開發(fā)之QString與QByteArray詳細用法與區(qū)別及QString QByteArray互轉
這篇文章主要介紹了Qt基礎開發(fā)之QString與QByteArray詳細用法與區(qū)別及QString QByteArray互轉,需要的朋友可以參考下2020-03-03VS報錯C6011的問題:取消對NULL指針的引用(解決方法)
這篇文章主要介紹了VS報錯C6011的問題:取消對NULL指針的引用(解決方法),C6011:取消對NULL指針的引用,發(fā)現是沒有進行空指針的判斷,解決方案跟隨小編一起看看吧2024-01-01