一、函式預設值
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(2)乙個函式不能既做預設值,又做函式過載。如下圖:sum函式既做了函式過載,又做了預設值,所以報錯double max(int a, int b); //?max@@yanhh@z
三、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 移位址 四個暫存器...