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

2021-09-02 02:36:30 字數 1094 閱讀 3025

實參匹配形參時從左向右匹配,但是從右向左依次賦預設值。

函式預設值不能重複複製

例如:①:int fun(int a,int b,int c=30);

int fun(int a,int b,int c=30)

return a+b+c;

在宣告時給定預設值,在定義時仍然給預設值,當給出的兩個預設值不同時導致編譯器在編譯時無法確定使用哪個預設值,所以報錯。

②:在下圖情況中由於從左向右匹配,從右向左複製的的原因,導致雖然提示有錯誤但是仍然可以執行 

③但是在乙個.cpp檔案中宣告   int fun(int a,int b,int c=30);

在另外乙個檔案中呼叫時仍然給c再次給預設值編譯時並不會出錯

對於①而言是因為乙個檔案中相同指令重複生成,但是在同乙個檔案中,能看到會報錯

但不同檔案中每個檔案都會有自己的符號表,未鏈結時互相看不到對方檔案中的符號。

內聯函式的特點:在函式呼叫點展開。

由內聯函式的特點我們可以想到巨集函式:在巨集函式中(1)不存在棧幀的開闢(2)不存在引數的代入(3)不存在返回值的帶出(4)不存在引數的清除。但是因為巨集函式在預編譯期間實現替換導致巨集函式無型別檢查和安全檢查,且不可以除錯。

內聯函式的使用情況:函式執行的開銷《函式開棧的開銷

inline只是對編譯器的乙個建議,編譯器會針對具體情況考慮是否採用。

內聯函式不一定會展開,例如對於遞迴函式,一定不會使用內聯處理,因為在編譯期間無法確定遞迴的深度(編譯期間無法知道值,執行時才會根據位址去拿值)。

內聯函式,static函式與巨集函式比較

1.c語言中符號生成依靠函式名,出現同名時會先判斷強弱符號,如果同為強則報錯

2.c++中符號生成依靠函式名和引數列表組成符號,返回值不參與過載

3.函式過載規則:函式名必須相同,引數個數、型別和排列順序必須有不同,函式的返回值型別可以相同也可以不同,僅僅返回值型別不同不足以構成過載。

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

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

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

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

函式的預設值 過載以及內聯函式

一 函式的預設值 給函式形參賦預設值時要注意的三點 1.從右向左依次賦預設值 int sum int a,int b,int c 10 正確 int sum int a,int b 10,int c 編譯程式報錯 sum 缺少引數 3 的預設引數 聯想記憶 我們都知道實參與形參的匹配是從左到右進行匹...