預設構造作為函式引數預設值的優化

2021-04-02 09:39:48 字數 1111 閱讀 7514

我們經常在看到這樣的函式宣告:

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...