#include<iostream>
int sum(int a, int b)
{
return a + b;
}
int main()
{
int a = 10;
int b = 20;
int ret = sum(a, b);
std::cout << "ret:" << ret << std::endl;
return 0;
}
sum函式的定義可以有以下幾種:
int sum(int a=10,int b=20);
sum();
int sum(int a,int b=20);
sum(a);
但是int sum(int a,int b=20) ;不可以編譯通過,原因是函式壓堆疊是從右向左入堆疊,給默認值的時候從右向左給,
各函式呼叫
int sum(int a=10, int b=10)
{
return a + b;
}
int main()
{
int a = 10;
int b = 20;
int ret = sum(a,b);
//mov eax,dword ptr[ebp-8]
//push eax
//mov ecx,dword ptr[ebp-4]
//push ecx
//call sum
std::cout << "ret:" << ret << std::endl;
//push 14H
//mov ecx,dword ptr[ebp-4]
//push ecx
//call sum
ret = sum(a);
//push 14H
//push 0Ah
//call sum
return 0;
}
呼叫形參帶默認值的函式與普通函式的效率有沒有提升?
答案是 有, 但個別情況效率會和原來一樣,但效率不會降低,
int ret = sum(a,b);
//mov eax,dword ptr[ebp-8]
//push eax
//mov ecx,dword ptr[ebp-4]
//push ecx
//call sum
當給出默認值時
int ret = sum(a,40);
//push 28H
//mov ecx,dword ptr[ebp-4]
//push ecx
//call sum
可以明顯觀察到第二段代碼相比于第一段代碼少執行了一條mov指令,效率自然有所提高,
函式默認值可以在那些位置給出?
1,宣告時給形參默認值

2,定義時給形參默認值

形參給默認值時,可不可以重復給?或者說多次給,給相同的默認值會怎么樣?
相同默認值時

不同時

所以說,形參給默認值時,不管是定義出給,還是宣告處給,形參默認值只能出現一次,就算默認值相同也不可以,
編譯器執行代碼時是自上而下依次執行的,給默認值時是自右向左給的,所以初始化默認值是下邊的這種形式也是可以的,

總結:
形參帶默認值的函式
1,給默認值時,自右向左給;
2,呼叫形參帶默認值的函式與普通函式的效率有提升,但個別情況效率會和原來一樣,但效率不會降低;
3,定義處和宣告處都可以給形參默認值;
4,形參給默認值時,不管是定義出給,還是宣告處給,形參默認值只能出現一次,就算默認值相同也不可以,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/80397.html
標籤:其他
