1.從函數模板談起
函數模板的類型推導機制是在c++98時代就有的,auto的類型推導機制與其基本一致,所以先理解函數模板類型推導。
函數模板可以用如下代碼框架表示:
#template<typename T>void f(PT param); f(expr);
PT與T的不同之處在于PT相對于T可能有一些飾詞(adornments),如const 和引用&。
對于模板類型T的推導是PT和expr共同作用的結果。下面分幾種情況討論類型推導的原則:
1)PT是一般的引用或指針
原則:
expr是一個引用(指針)類型,忽略其引用(指針)部分;
expr其他部分去匹配PT得到T的類型。 (匹配原則就是如果PT有const則expr的const忽略,PT無const