C 基礎之函式過載和內聯函式

2021-10-03 07:29:30 字數 1206 閱讀 3099

c++ 有別於 c ,比較重要的就是其抽象、封裝、繼承和多型等特性。多型又具體地體現在過載、虛函式和模板等之上。

今天就和大家聊一聊函式過載和內聯函式。

所謂的函式過載,就是說我們可以定義不同功能的同名函式,它們傳入引數型別是不一樣的,當你呼叫這個函式名的時候,編譯器會根據你給的引數型別,去匹配和呼叫相對於的函式。舉例如下,

這裡交換兩個數的值,使用了引用。所謂引用就是為物件起乙個別名。例如變數b = &a,b 就是 a 的乙個引用。對 b 的任何操作等同於對 a 的操作,也就是說,如果你改變了 b 的值,同時 a 的值也會發生改變。乙個交換兩個值的函式swap(int a, int b),如果將兩個值帶進去,發生交換的只是形參 a 和 b ,因為函式結束的時候這兩個引數的生命週期結束了,換句話說,實參a和b的值並未發生交換。而如果swap(int &a,int &b)則不同,他的引數是 a 和 b 的引用,也就是說函式中的 a 和 b 就是你帶入的實參,當函式中的 a 和 b 發生變化時,被引用的值在同時也發生了變化,而不會受到函式宣告週期的影響。另一方面,我們也可以通過指標來操作物件,也可以達到交換兩個數值的效果。與引用不同的是,引用是不占用儲存空間的,而如果用指標指向物件位址的時候會有自己的儲存空間。

當在乙個函式的定義或宣告前加上關鍵字 inline 則就把該函式定義為內聯函式,它主要是解決程式的執行效率。

inline int add_int(int x,int y,int z)

計算機在執行一般函式的呼叫時,無論該函式多麼簡單或複雜,都要經過引數傳遞、執行函式體和返回等操作,這些操作都需要一定的時間開銷。

若把乙個函式定義為內聯函式後,在程式編譯階段,編譯器就會把每次呼叫該函式的地方都直接替換為該函式體中的**,由此省去函式的呼叫及相應的儲存現場、引數傳遞和返回操作,從而加快整個程式的執行速度。

有人就問了,既然可以提高效率,為什麼不都用內聯函式呢?

內聯函式雖然具有普通函式的特性,但其處理方

式與普通函式不同,它是將呼叫表示式用內聯函

數體來替換,若內聯函式比較大,在程式中就會

有多個程式備份,反而會占用更多的記憶體空間,

這就失去了內聯函式存在的實際意義。因此, c++ 對內聯函式的定義有專門限制:

內聯函式和函式過載

內聯函式 巨集可以避免函式呼叫帶來的開銷,但存在兩個問題 1 巨集沒有作用域,沒有型別檢測,另外定義巨集時,需要時刻注意加括號,除此之外,當傳入變數自增時,會出現不可避免的錯誤。2 c 中巨集不能作為類的成員函式,因為預處理器不能訪問類成員。內聯函式主要為了替代巨集,另外,類中的成員函式預設加了in...

C 函式三(內聯函式和函式過載)

內聯函式,是為了解決程式中函式呼叫的效率問題。函式過載允許程式設計師定義函式時使用相同的函式名,以不同資料型別的資料作為形參,實現相似功能的函式。在呼叫函式時,系統要將程式當前的一些狀態資訊 斷點資訊儲存到堆疊中,同時轉到被調函式的 處去執行函式體語句,這些引數儲存與引數恢復的過程需要時間和空間開銷...

C 函式三(內聯函式和函式過載)

內聯函式,是為了解決程式中函式呼叫的效率問題。函式過載允許程式設計師 定義函式時使用相同的函式名,以不同資料型別的資料作為形參,實現相似功能的函式。在呼叫函式時,系統要將程式當前的一些狀態資訊 斷點資訊儲存到堆疊中,同時轉到被調函式的 處去執行函式體語句,這些引數儲存與引數恢復的過程需要時間和空間開...