以inline修飾的函式叫做內聯函式,編譯時c++編譯器會在呼叫內聯函式的地方展開,沒有函式壓棧的開銷,內聯函式提公升程式執行的效率
inline
void
swap
(int
& a,
int& b)
intmain()
像swap函式是乙個需要頻繁呼叫的函式。
呼叫函式的時候需要建立棧幀,建立棧幀是有空間和行能的消耗的
那怎麼解決這個問題呢?
在c語言中:使用巨集函式,但是巨集函式也有缺點,不方便除錯,複雜且容易出錯
在c++中:inline內聯函式,相比巨集函式,inline函式完美的解決問題
inline是一種以空間換時間的做法,省去呼叫函式額外開銷,所以**很長(一般超過十行)或者有遞迴的函式不適用使用內聯函式
inline對於編譯器而言只是乙個建議,編譯器會自動優化,如果定義為inline函式體內有遞迴等,編譯器優化時會忽略掉內聯
檔案
#include
using
namespace std;
inline
voidf(
int i)
;檔案#include
"f.h"
voidf(
int i)
檔案#include
"f.h"
intmain()
在f.h中宣告,在f.cpp中定義,當mian.cpp呼叫這個函式的時候就會去找他的位址,但是找不到位址。
inline函式的宣告要在原始檔中
巨集的優缺點?
答:優點是
增強**的復用性
.提高效能
缺點是不方便除錯巨集(因為預編譯階段進行了替換)
導致**的可讀性差,可維護性差,容易誤用
沒有型別安全的檢查
c++方面怎麼替代巨集?
答:巨集常量定義 使用const和enum 替代巨集
巨集函式定義 使用inline函式替代巨集
C 中的內聯函式
華清遠見嵌入式學院 講師。c 中存在一些具有特殊意義或功能的特殊函式,我們來簡單介紹一下內聯函式。從軟體工程的角度來看,我們通常將乙個程式通過一組函式來進行實現,但是函式的呼叫涉及到執行時間的開銷,如果有的函式需要頻繁使用,則累計占用的時間會很長,所以c 提供了內聯函式的機制來提高效率,也就是在編譯...
C 中的內聯函式
c 中的內聯函式 華清遠見嵌入式學院講師。c 中存在一些具有特殊意義或功能的特殊函式,我們來簡單介紹一下內聯函式。從軟體工程的角度來看,我們通常將乙個程式通過一組函式來進行實現,但是函式的呼叫涉及到執行時間的開銷,如果有的函式需要頻繁使用,則累計占用的時間會很長,所以c 提供了內聯函式的機制來提高效...
C 中的內聯函式
本文主要和大家一起來學習一下c 中的內聯函式,旨在能夠更深層次的了解和掌握c 相關用法,力爭做到知其然還要知其所以然。關於內聯函式,本文主要從以下幾個方面進行了整理和歸納。一 相關描述 1 內聯函式主要目的是為了提高函式的執行效率,用關鍵字inline放在函式定義的前面即可,將函式指定為內聯函式。2...