內聯函式和函式過載

2022-04-27 14:56:30 字數 1302 閱讀 1159

內聯函式

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

內聯函式主要為了替代巨集,另外,類中的成員函式預設加了inline。

1 inline void func(); //宣告2

3 inline void func()

以下情況不能使用內聯函式:1)不能存在任何形式的迴圈語句;2)不能存在過多的條件判斷語句;3)函式體不能過於龐大;4)不能對函式進行取址操作,因為內聯函式直接將函式體替換掉,本來就丟了函式入口,再次取位址沒有意義。

另外,內聯函式對於編譯器而言只是乙個建議,編譯器不一定會接受這種建議,即使沒有宣告內聯函式,編譯器可能也會內聯一些小的簡單的函式。

函式預設引數和佔位引數

這個東西用到的時候比較少,函式預設引數,如果有乙個位置有了預設值,那麼從後逐個位置開始,從左往右都必須有預設值,另外函式宣告和實現只能有乙個預設值,否則會不明確,報錯

函式佔位引數,也可以有預設值,另外c語言中沒有預設引數和佔位引數

void test(int a)

當函式中有佔位引數時,呼叫時必須提供這個引數

函式過載

c++的函式名稱可以重複,稱為函式過載。

注意事項:1)其中必須在同一作用域下的函式名稱相同,不能是乙個在全域性,乙個區域性,或者不同的**塊中;2)可以根據函式引數的個數、型別(const也可以作為過載條件)、順序不同進行函式過載,但不能用函式返回值進行過載。3)當函式過載遇到函式預設引數時,要注意二義性。

1

class

animal_;//

這個函式跟其他函式不在乙個作用域,不叫過載3};

45void

func()89

void func(int

a)12

13void func(int a, char b = 'c')

1617

void func(double

b)20

21void func(int a, double

b)24 //引用過載

25void func2(int &a)

2829

void func2(const

int &a)

3233

34int

main()

函式介紹(內聯函式和函式過載)

過載概念 同乙個識別符號在不同的上下文有不同的意義 函式過載 同乙個函式名定義不同的函式 當函式名和不同的引數搭配時,表達的意思也不同 由函式名和函式引數列表決定的,與返回值無關係 函式過載至少滿足以下條件 引數個數不同 引數型別不同 引數順序不同 編譯器呼叫函式過載時的原則 將所有同名函式作為候選...

過載函式 內聯函式

兩個以上的函式,具有相同的函式名,但是形參的個數或者型別不同,編譯器會根據實參型別及個數的最佳匹配來自動確定呼叫哪乙個函式。int add int x,int y float add float x,float y int add int x,int y,int z float add float ...

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

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