**函数模版**
C++另一种编程思想称为 泛型编程 ,主要利用的技术就是模板
C++提供两种模板机制: 函数模板和类模
函数模版的声明或使用:
template<typename T> 或者 template<class T> 一个主要用于普通函数模版,一个是类模版
都用class都没有错。
解释:
template --- 声明创建模板
typename --- 表面其后面的符号是一种数据类型,可以用class代替
T --- 通用的数据类型,名称可以替换,通常为大写字母
示例:
//利用模板提供通用的交换函数
template<typename T>
void mySwap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
}注意及作用:
1. 函数模板利用关键字 template
2. 使用函数模板有两种方式:自动类型推导、显示指定类型
1. 自动类型推导,必须推导出一致的数据类型T,才可以使用
2. 模板必须要确定出T的数据类型,才可以使用
3.模板的目的是为了提高复用性,将类型参数化
** 普通函数与函数模板的区别 **
1. 普通函数调用时可以发生自动类型转换(隐式类型转换)
2. 函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换
3. 如果利用显示指定类型的方式,可以发生隐式类型转换
//函数模板 template<class T>
T myAdd02(T a, T b)
{
return a + b;
}
//使用函数模板时,如果用自动类型推导,不会发生自动类型转换,即隐式类型转换
void test01()
{
int a = 10;
int b = 20;
char c = 'c';
cout << myAdd01(a, c) << endl; //正确,将char类型的'c'隐式转换为int类型 'c' 对应 ASCII码 99
//myAdd02(a, c); // 报错,使用自动类型推导时,不会发生隐式类型转换
myAdd02<int>(a, c); //正确,如果用显示指定类型,可以发生隐式类型转换
}
总结:建议使用显示指定类型的方式,调用函数模板,因为可以自己确定通用类型T