#include
intsum
(int a,
int b)
intmain()
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)
intmain()
呼叫形參帶預設值的函式與普通函式的效率有沒有提公升?
答案是 有, 但個別情況效率會和原來一樣,但效率不會降低。
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,形參給預設值時,不管是定義出給,還是宣告處給,形參預設值只能出現一次,就算預設值相同也不可以。
C 3 形參帶預設值的函式和內聯函式
形參帶預設值得函式,在呼叫的時候可以不用傳引數 class base private int b int main 以上是一種引數的情況,當引數有兩個及以上的時候 給預設值的時候必須從右往左給 無論是在定義的時候或者宣告的時候都可以給定形參的預設值,且形參的預設值只能出現一次 int sum int...
C 帶預設值的函式
url 在c 中,往往需要給某些函式的引數指定預設的值,其實這樣的思想並不難理解,這裡只是想說這樣的函式應該如何宣告和定義。比如說希望給函式print int value,int base 的引數base指定乙個預設的引數值10,那麼在.h檔案中宣告時,應該宣告為print int value,in...
帶引數預設值的函式
函式有乙個或多個的引數有預設值 如float area float r 3.5 int sum int a,int b 5,int c 10 int fun int a,int b,int c 9 int fun int a,int b,int c int fun int a,int b,int c...