日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C++的內聯函數你了解嗎_C 語言

作者:表哥抱表弟 ? 更新時間: 2022-05-19 編程語言

1.概念

以inline修飾的函數叫做內聯函數,編譯時C++編譯器會在調用內聯函數的地方展開,沒有函數壓棧的開銷,內聯函數提升程序運行的效率。

2.函數演示

我們先來看一下普通的函數:

#include 
using namespace std;
 int Add(int left, int right) {
	return left + right;
}
int main() {
	Add(1, 2);
	return 0;
}

在匯編代碼我們可以看出函數調用和壓棧:

我們在加inline 試試看:

#include 
using namespace std;
inline int Add(int left, int right) {
	return left + right;
}
int main() {
	Add(1, 2);
	return 0;
}

反匯編:

發現還是一樣,為什么呢?

在debug版本下編譯器不會將內聯函數展開,因為展開就調試不了.

我們需要設置一下屬性:(vs2019)

首先我們打開屬性面板:

接下來進行調試:

?沒有函數的調用!!

反匯編:

3.函數特性

1.inline是一種以空間換時間的做法,省去調用函數額開銷。所以代碼很長或者有循環/遞歸的函數不適宜使用作為內聯函數。

2.inline對于編譯器而言只是一個建議,編譯器會自動優化,如果定義為inline的函數體內有循環/遞歸等等,編譯器優化時會忽略掉內聯。

3. inline不建議聲明和定義分離,分離會導致鏈接錯誤。因為inline被展開,就沒有函數地址了,鏈接就會找不到。

4.可以代替宏定義函數.

總結

原文鏈接:https://blog.csdn.net/weixin_62029250/article/details/123503450

欄目分類
最近更新