目录
1.1函数模板语法
建立通用的模具,大大提高复用性,模板只是一个框架,不可以直接使用
//T代表数据类型
template<typename T>
void mySwap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
}
1.2函数模板的使用方式
1.2.1自动类型推导
int a = 10;
int b = 20;
mySwap(a, b);
编译器会自动推导出T的类型为int
1.2.2显示指定类型
int a = 10;
int b = 20;
mySwap<int>(a, b);
明确指定T的类型为int
注意事项:
①自动类型推导,必须正确推出T的类型,否则无法成功调用函数
②模版必须指定或推导出T的类型,否则不可单独使用
1.3普通函数与模板函数
1.3.1区别
- 普通函数调用时,可以发生自动类型转换(隐式类型转换);
- 函数模板调用时,若利用自动类型推导,不会发生隐式类型转换;若利用显示指定类型,可以发生隐式类型转换。
1.3.2调用规则
- 函数模板和普通函数都可以实现时,优先使用普通函数
- 可以通过空模板参数列表强制调用函数模板
- 函数模板可以重载
- 若函数模板可以产生更好的匹配,优先调用函数模板
注意:通过函数模板产生的函数,称为模板函数
myPrint(c1,c2)会调用函数模板,因为若调用普通函数,会进行类型转换,而调用函数模板,直接就能获取到数据类型,代价更小,因此调用函数模板