內聯函式 函式過載 帶預設值函式的函式學習總結

2021-09-24 10:19:37 字數 1160 閱讀 4843

一、關於內聯函式

內聯函式和函式過載都是c++種的語法,就是被inline修飾的函式,例如 inline char *fun(int );大意可將內聯函式理解為在呼叫內聯函式的時候,在呼叫處直接將函式函式展開,而沒有標準的函式呼叫,也不存在標準的函式呼叫的函式棧幀開闢,節約了資源,提公升了效率。但是並不是說所有 inline char *fun(int );中皆是如此,被inline修飾後,它只是建議編譯器做內聯展開處理,至於最後是否真的展開要有編譯器決定,例如說在遞迴函式中就無法內聯,因為遞迴函式要在執行的時候才能知道具體的呼叫,此時編譯器在編譯時無法做編譯展開內聯處理。

二、函式過載

函式過載之所以能夠實現是因為由於c和c++在編譯時生成符號的規則不同,c由函式名決定符號,而c++由函式名加引數列表決定,過載函式必須是在相同的作用於且函式名相同的函式,注意,返回值無法作為函式過載的標誌。

三、帶預設值的函式

在函式宣告和定義的時候我們尅給他傳遞預設引數,但必須是從右往左的順序,即使必須先宣告右邊,在宣告左邊;當呼叫已經宣告的帶預設值的函式時,如果給對應引數傳遞了新的值則按照新的值,沒有咋使用預設值;值得一提的時候,給函式乙個預設值,不僅能提高物件中方法的安全性還能提高函式的效率,在編譯的時候如果使用的是預設值則將乙個立即數傳給暫存器,提公升了效率。

四、函式呼叫的作用域問題

在函式中無法再定義乙個函式。但是可以再宣告乙個函式。當發生函式呼叫的時候,優先呼叫離自己最近的作用域;作用域優先順序:區域性》全域性》整個工程;記住,過載的發生必須在同乙個作用域。

五、c與c++的相互呼叫

c函式:void func(int ,int );  c++函式: void funcpp(int,int);

c++中呼叫c:不能直接呼叫,把c函式的宣告擴在extern 「c」中:

extern "c"

void func(int ,int );

void funcpp(int ,int)

func(10,10);

c中呼叫c++:不能直接呼叫,把c++原始碼擴在extern 「c」 中;

extern  c{

void funcpp(int a,intb)

return a+b;

內聯函式 函式過載 函式預設值

為了減少函式呼叫的開銷,引入了內聯函式機制。編譯器處理對內聯函式的呼叫語句時,是將整個函式的 插入到呼叫語句處,而不是產生呼叫函式的語句。inline int max int a,int b 乙個或者多個函式,名字相同,然而引數個數或者引數型別不同,這叫做函式的過載。編譯器根據呼叫語句的實參的個數和...

函式預設值 內聯函式 函式過載

c 在宣告函式原型的時候,可以為乙個或多個引數指定預設引數值,當函式呼叫的時候,如果沒有指定這個值,編譯器會自動用預設值替代。列如 int sum int a 1 int b 10 int main 函式預設值的特點自右向左,依次設計 預設值不能重複賦值 即如果函式宣告和函式定義分開,函式宣告設定了...

函式預設值,內聯函式和函式的過載

實參匹配形參時從左向右匹配,但是從右向左依次賦預設值。函式預設值不能重複複製 例如 int fun int a,int b,int c 30 int fun int a,int b,int c 30 return a b c 在宣告時給定預設值,在定義時仍然給預設值,當給出的兩個預設值不同時導致編譯...