C++98:the one for function templates
C++11: auto and decltype
C++14:拓展了auto和decltype可以使用的环境
Item 1 Understand template type deduction
1. 模板的类型推导是:auto。
Things to Remember:
- 当template 类型推导的时候,参数如果是引用类型,会被对待成非引用类型。即 reference-ness is ignored
- 当推导类型是通用引用参数,左值会得到特殊的对待。
- 当推导类型为值类型,const和volatile 参数都被对待为 non-const和 non-volatile.
- 当进行teamplate类型推导,参数是数组或者函数名称,会被衰减为指针,除非他们是初始化为ref。
在本Item中,使用了一个通用的类型来讲解模板是如何进行推导的。在以下的三种类型:
- Case1 :ParamType 是一个指针或者是一个引用类型,但是不是通用引用(?)
- Case2 :ParamType 是一个通用引用
- Case3 :ParamType 既不是一个指针也不是一个引用
都是使用这个通用的模板:
template<typename T>
void f(ParamType param);
f(expr)
1> Case 1: