2011-09-10 100 views
1
template <typename T> void quark(T&& t) { 
} 

前面的代碼有解釋:模板術語

當我們調用quark(up),進行模板參數推導。 quark()是一個帶模板參數T的函數模板,但我們沒有提供顯式模板參數(它看起來像quark<X>(up))。相反,通過將函數參數類型T&&與函數參數類型(字符串類型的左值)進行比較,可以推導出模板參數。

有人可以說我是誰在模板參數,模板參數,函數參數,函數參數誰?

可能是參數和參數之間的區別是什麼類型在函數聲明和參數中寫入的參數是實際傳入函數的實體?但功能和模板args/pars之間的區別我甚至不能想象。

回答

3

模板參數是T。模板參數是實際類型,值爲T

考慮這一點,

template<typename T, typename U> 
void f(T a, U b); 

f<int,char>(10, 'A`); 

這裏TU是模板參數,並intchar是模板參數。由於它是一個函數模板,因此您也可以分別說函數模板參數函數模板參數

而且ab是函數參數,並且10'A'是函數參數。

還要注意的是,在某些情況下函數模板參數可以通過編譯器可以推斷:

f(10, 'A'); //template arguments can be deduced from 10 and 'A' 

這裏T被推斷爲int從函數參數10,並U被推斷爲char'A'

有趣的區別是,有時編譯器可以推斷出函數模板參數,但並不能推導出函數參數!

4

模板參數是T,模板參數是調用夸克(向上)時發生的任何事情。

函數參數是t,函數參數是up的。