函式呼叫傳參內聯過載模板

2021-09-10 23:12:27 字數 1918 閱讀 5317

1.帶預設形參值的函式

#include

using

namespace std;

intadd

(int a=3,

int b=5)

intmain()

2.c++函式過載

函式過載即兩個或以上的函式,函式名相同,但形參型別或個數不同,編譯器根據呼叫方傳入的引數的型別和個數,自動選擇最適合的乙個函式來進行繫結呼叫,自動實現選擇。

3.函式模板

函式模板,是可以建立乙個通用的函式,可以支援多種形參。

用關鍵字template來定義,形式如下:

template

返回值 函式名(形參表列) 模板參數列

函式體說明一下,這個一般形式中,第一行的template是一句宣告語句 ,template是定義模板函式的關鍵字,尖括號裡可以有多個型別,前面都要用class(或者typename來定義)。然後後面跟定義的函式模板,切記中間不可以加其他的語句,不然會報錯!

#include

using

namespace std;

template

<

classt1,

class

t2>

t1 add

(t1 x,t2 y)

intmain()

在主函式中,實際呼叫時,我們呼叫了三次,分別三種不用的型別傳入,模板函式中的t1和t2型別將根據實際傳入的型別變成具體型別。這個化成就叫做模板的例項化。

下面是輸出:

4.內聯函式

函式的呼叫,想必大家都用過,乙個函式在被另乙個函式呼叫的時候,才有生命,才會為其準備對應的記憶體空間,再呼叫完畢之後再清理釋放結束。

可以看到,每一次的函式呼叫都會帶來一些時間和空間上的花銷。

而自定義函式的乙個作用,也是為了提高**的重用性,可以在需要的時候隨時呼叫,提高開發效率。那麼,乙個**本身就不多,又頻繁被呼叫的函式,我們就該好好想想,這樣做到底合算不合算了。

好在,c++已經幫我們考慮到這個問題,為我們提供了內聯的機制,即仍然使用自定義函式,但在編譯的時候,把函式**插入到函式呼叫處,從而免去函式呼叫的一系列過程,像普通順序執行的**一樣,來解決這個問題!

那麼用法呢,也非常簡單,只需要在函式定義的前面加上關鍵字inline宣告就可以了

如以下**:

#include

using

namespace std;

inline

intmax

(int a,

int b)

intmain()

值得說明的是,內聯函式的定義要在呼叫之前出現,才可以讓編譯器在編譯期間了解上下文,進行**替換。

除此以外,內聯函式與register變數類似,僅僅是我們提給編譯器的乙個請求,最終是否真正會實現內聯,由編譯器根據情況自行選擇。

python 函式,傳參,呼叫

簡單函式介紹 定義 形參 實參 傳參的4中方式 呼叫 return 1.函式定義 python中函式必須先定義,再使用.寫乙個函式前要空兩行,寫完後再空兩行.pycharm書寫 def 函式名 引數 1 2 2.函式呼叫 函式名 引數 舉例 使用函式完成 1 2 定義函式 def add resul...

fixture 呼叫函式名傳參

print 結束測試 測試類 pytest.mark.usefixtures init login class testopenapi pytest.mark.usefixtures init login def test freeze self,init login print init logi...

QT呼叫python檔案(呼叫函式傳參)

pro檔案中 includepath i e miniconda3 include libs le miniconda3 libs lpython37 include define slots q slots include int main int argc,char ar 設定python檔案路...