函式型別推導

2021-10-22 22:23:58 字數 920 閱讀 1828

乙個普通函式:

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