1. 程式人生 > >函式的預設值,行內函數,函式過載

函式的預設值,行內函數,函式過載

函式預設值
c++在函式方面比c多了個預設值,實際是當給函式不傳引數是該函式就會使用預設值對引數進行賦值,當然預設值是從右向左依次賦值
void sum(int a,int b=2,int c=3)
{}
int main()
{
sum(1);//因為a無預設值,所以要傳引數
}
函式預設值的特點
自右向左,依次設計
預設值不能重複賦值(即如果函式宣告和函式定義分開,函式宣告設定了預設引數,函式定義不能再設定預設引數。
行內函數
C++中用 inline修飾的函式稱之為行內函數
行內函數的特點:在函式呼叫點之間展開
好處:無函式開棧淸棧開銷,速度快
inline函式只是給編譯器的一個建議:如果函式執行的開銷小於函式開棧的開銷使用行內函數。
內聯在debug版本不生效,只在release 生效
遞迴函式一定不會成為行內函數,編譯器會將其按普通函式處理
inline函式與普通函式的區別
內聯只是在函式前加inline,在之就是內部實現上,內聯直接在呼叫點展開(和巨集有些相似)而普通函式被呼叫時,系統首先跳躍到該函式的入口地址,執行函式體,執行完成後,再返回到函式呼叫的地方,函式始終只有一個拷貝。
inline函式與巨集的區別
inline函式編譯期間處理 有型別檢查和安全檢查 ,可以除錯
巨集在預編譯期間處理,無型別檢查和安全檢查 , 不可除錯
inline函式與static修飾的函式的區別
從作用域來看,兩者都是隻有本檔案可見
static修飾變數和函式,而inline只修飾函式
static修飾的函式在符號表中產生的符號是local的,inline修飾的直接在呼叫點展開,不產生符號
函式過載


c++中不允許變數名稱重複,但允許函式名重複,這為函式過載提供了條件
過載的依據
1函式名相同,形參型別不同
2除返回值不同外,其餘引數型別相同
函式過載的三要素
1同名作用域
2同名
3引數不同
c++中函式符號由返回值,函式名,形參個數,形參型別共同決定
int sum(int a,int b=1,int c=2)
double sum(double a,double b,double c)
char sum(char a,char b char c)
三個函式共同構成函式過載