乙個普通函式:
int
func
(int
& a)
func的型別是int (int&)。
int (*)(int&)是函式指標型別,也即&func的型別。
進行如下實驗:
void
func123
(int
& a)
template
<
class
t>
void
setfunc
(t t,
int a)
// pass by value
template
<
class
t>
void
setfunc1
(const t& t,
int a)
// pass by reference
intmain()
輸出如下:
void (__cdecl*)(int &)
void __cdecl(int &)
根據t的型別可以推導出模板class t的型別進而推導出模板函式隱式例項化的型別。
setfunc(void(*)(int &) t, int a)
setfunc1(void(int &) t, int a)
根據以上實驗,可以得出以下結論:
1. 按值傳參的情形,函式型別會退化為函式指標型別,從語義上說,函式不能被「按值拷貝」,但函式指標的位址值則是可以按值拷貝的。
2. 引用傳參的情形,函式型別不會退化為函式指標型別。
3. 不能對乙個函式型別或者函式引用進行sizeof操作,可以對乙個函式指標sizeof。
C 模板函式的型別推導
我在用泛型程式設計寫二維vector的排序模板時,寫出這樣乙個 vector的字典序比較,v1 v2是false templatebool cmp vector v1,vector v2 編譯結果 1 c program files x86 microsoft visual studio 10.0 ...
模板型別推導 auto推導
effective modern c 果然是神書,乾貨滿滿,簡單記錄下。item1 模板推倒 典型的模板函式 temlate void fn paramtype param 要記住的東西 在模板型別推導的時候,有引用特性的引數的引用特性會被忽略 在推導通用引用引數的時候,左值會被特殊處理 在推導按值...
模板型別推導
param引用無const修飾template void f t param int x 1 const int cx x const int rx x f x f cx f rx 函式呼叫 t的型別 param的型別 f x intint f cx const int const int f rx...