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

2021-09-01 23:07:33 字數 1669 閱讀 1969

c++在宣告函式原型的時候,可以為乙個或多個引數指定預設引數值,當函式呼叫的時候,如果沒有指定這個值,編譯器會自動用預設值替代。

列如:

int  sum(int a=1 ,int b =10)

int main

函式預設值的特點自右向左,依次設計

預設值不能重複賦值(即如果函式宣告和函式定義分開,函式宣告設定了預設引數,函式定義不能再設定預設引數。)

一般把預設值賦在宣告上

零初始化

int sum (double a =double(),int b =int (),char c =char();

代表對應型別的0;

c++中用 inline修飾的函式稱之為內聯函式

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

好處:無函式開棧淸棧開銷,速度快

缺點:以**膨脹為代價,空間換取時間

inline函式只是給編譯器的乙個建議:如果函式執行的開銷小於函式開棧的開銷使用內聯函式。

內聯在debug版本不生效,只在release 生效

遞迴函式一定不會成為內聯函式,編譯器會將其按普通函式處理

inline函式與普通函式的區別

內聯只是在函式前加inline,在之就是內部實現上,內聯直接在呼叫點展開(和巨集有些相似)而普通函式被呼叫時,系統首先跳躍到該函式的入口位址,執行函式體,執行完成後,再返回到函式呼叫的地方,函式始終只有乙個拷貝。

inline函式與巨集的區別

inline函式編譯期間處理 有型別檢查和安全檢查 ,可以除錯

巨集在預編譯期間處理,無型別檢查和安全檢查 , 不可除錯

inline函式與static修飾的函式的區別

從作用域來看,兩者都是只有本檔案可見

static函式修飾變數和函式,而inline只修飾函式

static修飾的函式在符號表中產生的符號是local的,inline修飾的直接在呼叫點展開,不產生符號

內聯函式的注意事項一般實現在.h檔案中

內聯在debug版本不生效,只在release 生效

只是給編譯器的乙個建議。遞迴、迴圈、switch 均不能成為內聯函式

內聯要基於實現,不是基於宣告的。

c++ 不允許變數重名,但是允許多個函式取相同的名字,只要參數列不同即可,這叫作函式的過載。過載就是裝載多種東西的意思,即同乙個事物能完成不同功能。使用函式過載可以讓程式設計師對完成相似功能不同函式,起相同函式名。

列如

int fun(int a,int b )//原函式

double fun(double a,double b)//返回值引數型別不同,可以過載

double fun(int a,int b)//只有返回值不同,不能過載

下面檢視vs中符號表,正因為符生成的符號不同,所以才可以使用過載

過載的依據函式名相同,形參型別不同

不能除返回值不同外,其餘引數型別相同

函式過載的三要素

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

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

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

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

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

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