我們經常在看到這樣的函式宣告:
int f(double,myclass=myclass());
不僅是我們寫的**,std庫中也經常這樣寫。
仔細想想,如果這個函式多次使用這個預設值那就會呼叫多次建構函式,這樣一來效率就降低了。
下面是我針對,這中情況寫的乙個zero模板。
zero只有乙個可用的介面就是value,value()會返回預設值。
其中還對基本數值型別進行了特別優化,這樣只是為了全面,如果直接用0也是一樣的。
這個東西的缺點是不能提供自己的值,只能用t()。
主要原因是因為template使用的 引用或指標只能用全域性物件。
如果有全域性物件那還不如直接用那物件哪。
下面我的zero.hpp檔案內容:
#ifndef zero_piboye_hpp
#define zero_piboye_hpp
//author:piboye
//created date: 2005,12,29
namespace piboye
};template
t const zero::c_value=t();
//輔助特化巨集
#define mspeczero(t,val) /
template <> /
class zero//};
//基本型別特化
mspeczero(int,0)
mspeczero(short,0)
mspeczero(long,0)
mspeczero(char,0)
mspeczero(unsigned int,0)
mspeczero(unsigned short,0)
mspeczero(unsigned long,0)
mspeczero(unsigned char,0)
mspeczero(float,0.0f)
mspeczero(double,0.0)
mspeczero(long double,0.0l)
}#endif //zero_piboye_hpp
使用方法:
int f(double,myclass=zero::value());
函式(引數,預設值)
js定義函式引數沒有非常嚴格的要求,可以有也可以沒有,在呼叫的時候也是,引數可以有可以沒有,也可以和定義時的引數個數不一致 沒有給count傳入引數,預設為10 也可以直接在引數中給count賦值 但是特別注意的是不能給count傳入0,因為0與undefined都是false,因此count傳入的...
函式引數預設值
include 函式預設值為0 intmul int x 0 c語言編譯器會報錯,c 不會 intmain int argc,char ar 預設值不需要在定義時給出,宣告時給出即可 intmul int x 函式預設引數的規則 引數的預設值必須從右向左匹配 函式呼叫時使用了預設值,則後續引數必須使...
lua 函式 預設值 定義函式引數的預設值
如果你想要命名引數和預設值,如php或python,你可以使用表構造函式呼叫你的函式 myfunction 函式本身可以有這樣的簽名 function myfunction t setmetatable t,local a,c t 1 or t.a,t 2 or t.b,t 3 or t.c fun...