16.2模板实参推断
16.2.1类型转换与模板类型参数
对于函数模板,编译器利用调用中的函数实参来确定其模板参数。从函数实参来确定模板实参的过程称模板实参推断。如果一个函数形参的类型使用了模板类型参数,那么它采用特殊的初始化规则。
能在调用中应用于函数模板的包括如下两项:
1.const转换:可以将一个非const对象的引用(或指针)传递给一个const对象的引用(或指针)形参
2.数组或函数指针转换:如果函数形参不是引用类型,则可以对数组或函数类型的实参应用正常的指针转换。一个数组实参可以转换为一个指向其首元素的指针。类似的,一个函数实参可以转换为一个该函数类型的指针。
如果函数参数类型不是模板参数,则对实参进行正常的类型转换。
16.2.2
函数模板显式实参
template <typename T1,typename T2,typename T3>
T1 sum(T2,T3);//无法确定T1类型
auto i=sum<long long>(1,2.3);
//T1==longlong,T2=int,T3=double;
显式模板参数按从左到右的顺序与对应的模板参数匹配:第一模板参数与第一个模版参数匹配,第二个实参与第二个参数匹配,以此类推。只有尾部参数的显式模板实参才可以忽略,前提是它们可以从函数参数推断出来。
之后的内容大多琐碎,所以不打算深究故在此省略了。