官术网_书友最值得收藏!

5.4 內聯函數

內聯函數就是將函數內嵌到主函數中,這樣會加快函數的運行速度,從而提高代碼運行效率。內聯函數也屬于一種函數,只是其在內存中的處理機制不同。普通函數屬于外部調用,而內聯函數會將函數的代碼內聯到主函數中進行執行。C++語言使用內聯函數替代C語言中的宏定義。

5.4.1 內聯函數的定義

定義內聯函數的語法與定義普通函數的語法類似,只是在定義函數前增加關鍵字inline,其語法形式如下。

img

注意:如果定義時指定有返回類型也需要加return語句。

inline是C++關鍵字,在函數聲明或定義中函數返回類型前加上關鍵字inline,即可把函數指定為內聯函數。

內聯函數的執行原理與普通函數不同。內聯函數可以解決頻繁調用的函數大量消耗棧空間(棧內存)的問題。

內聯函數在調用時,會在內存中將函數中所有的代碼復制到主函數中,然后主函數依次按照順序執行即可。而普通函數在調用時,首先需要地址跳轉,然后復制數據,再執行數據,執行完后再次地址跳轉到主函數。如果頻繁調用函數,這種地址跳轉會造成大量的運算負擔。

簡單來講,普通函數的調用就像使用外接U盤傳輸數據,每次調用時都需要插上U盤,復制數據,不用時,再拔掉U盤。而內聯函數的調用就像使用硬盤傳輸數據,想用時就直接復制數據,不需要頻繁地插拔。

5.4.2 內聯函數的使用

關鍵字inline必須與函數定義放在一起才能使函數成為內聯函數,僅僅將inline放在函數聲明前面是不起任何作用的。

示例5-7】下面定義并使用內聯函數。

img

程序運行結果如下。

img

注意:在處理的數據規模較小,并且硬件資源足夠的情況下,我們很難發現內聯函數的運算優勢。

主站蜘蛛池模板: 岳普湖县| 格尔木市| 铜山县| 台南市| 崇阳县| 原阳县| 酒泉市| 杭锦后旗| 内黄县| 莱芜市| 怀宁县| 麻阳| 双牌县| 阜阳市| 东光县| 云南省| 大石桥市| 镇雄县| 玉环县| 大姚县| 东明县| 大田县| 德令哈市| 东兴市| 丰城市| 呼伦贝尔市| 达尔| 西乌珠穆沁旗| 达孜县| 邵武市| 阳山县| 六盘水市| 甘肃省| 塔城市| 曲周县| 鹤岗市| 威信县| 绿春县| 喀什市| 云龙县| 德保县|