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 的預設引數 聯想記憶 我們都知道實參與形參的匹配是從左到右進行匹...