1.1函数模板:语法
1.函数模板:指建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟类型代表。
2.语法:template
函数声明或定义:
template:声明创建模板
typename:表明其后面的符号是一种数据类型,可以用class代替。
T:通用的数据类型,名称可以替换,通常为大写字母。
例如:
template<typename T> //声明一个模板告诉编译器T不要报错,T是一个通用数据类型,typename可以替换成class
void mySwap(T &a, T &b)
{
T temp = a; //在使用时有两种方法:
a = b; //自动类型推导:mySwap(a,b);
b = temp; //显示制定类型:mySwap<int>(a,b);
}
1.2函数模板:注意事项
1.自动类型推到必须推导出一致的数据类型T才可以使用。
2.模板必须要确定出T的数据类型才可以使用。
1.3函数模板:区别
普通函数和函数模板区别:
1.普通函数调用可以发生隐式类型转换
2.函数模板用自动类型推导,不可以发生隐式类型转换,用显式指定类型,可以发生隐式类型转换。
1.4函数模板:调用规则
普通函数与函数模板的调用规则:
1.如果函数模板和普通模板都可以实现,优先调用普通模板
2.可以通过空模板参数列表来强制调用函数模板
3.函数模板也可以发生重载
4.如果函数模板可以产生更好的匹配,优先调用函数模板