函式預設值 過載 inline函式

2021-09-02 01:13:08 字數 2071 閱讀 9120

一、函式預設值

c89:  不支援帶有預設值的函式        c++99: 支援帶有預設值的函式

預設值注意事項:

1、預設函式一般寫在宣告中

2、自右向左依次賦值(即設定預設值時應該從右至左),因為實參的傳遞是從前至後。如若不是這樣則報錯。

3、預設值只能賦一次

4、預設值的限制:

int compare(int a, int b, int c = 70);//c=70為函式預設值

else if (b > a && a > c)

else }

int main()

設定多個預設值時;如下:

int compare(int a, int b ,int c=70);//設定多個預設值時預設值自右向左賦值,不能跳過b,給a c賦值

int compare(int a, int b =80,int c);

int compare(int a=20, int b ,int c)

else if (b > a && a > c||b>c && c>a)

else }

int main()

二、函式的過載c++允許在同乙個作用域內用同乙個函式名定義多個函式,這些函式的引數個數和引數型別不相同,這些同名的函式用來實現不同的功能。這就是函式的過載,即乙個函式名多用。

int max(int a, int b)//以下四個函式均為函式名相同,引數型別不同,為函式的過載

double max(double a, double b)

char max(char a, char b)

char* max(char* a, char* b)

int main()

函式過載的三要素:

c++函式符號生成的規則:返回值   函式名稱  引數列表

函式的過載決議:規則對過載作了支援,但過載並不依賴於規則

函式過載注意事項:

(1)函式名相同,引數列表相同,返回值不同,不能構成函式過載(如果只有返回值不同,則不構成過載,過載不依賴返回值 ) 如下:

int max(int a, int b);    //?max@@yahhh@z

double max(int a, int b);    //?max@@yanhh@z

(2)乙個函式不能既做預設值,又做函式過載。如下圖:sum函式既做了函式過載,又做了預設值,所以報錯

三、inline 函式《內聯函式》1

、inline函式的用法 :呼叫點將**直接展開,編譯階段處理。

2、內聯函式的優缺點:

3、內聯函式的使用建議:

函式堆疊的開銷 > 函式執行的開銷,建議寫成inline函式

4、內斂函式的設計位置:  一般寫在標頭檔案下

5、inline函式與static函式的區別:

static:區域性的,有開棧、清棧的過程,有符號生成

inline:無開棧 、清棧,沒有符號生成。

6、內聯函式的注意事項:

簡單inline函式**實現:

inline void print(int arr, int len)//編譯階段處理inline函式

print(arr, len - 1);

printf("%d ", arr[len - 1]);

}int main()

; int len = sizeof(arr) / sizeof(arr[0]);

print(arr, len);

return 0;

}

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

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

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

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

棧 呼叫約定 函式預設值 inline函式

data存放已初始化但初始化不為0的資料 bss存放未初始化或初始化為0的資料 強弱符號 強符號 已初始化的全域性變數 弱符號 未初始化的全域性變數 規則 1 兩強符號 重定義錯誤 2 一強一弱,選強符號 3 兩弱符號,針對編譯器不同選擇不同 函式堆疊呼叫 move 移值 lea 移位址 四個暫存器...