15.1.2 函数模板的注意事项
- 自动类型推到要推到除一致的数据类型
我们写个示例,让int和char交换试试:
#include <iostream>
using namespace std;
//1、自动类型推到,必须要推导出一致的数据类型才可以使用
template<class T> //typename可以用class
void mySwap(T& a, T& b)
{
T temp = a;
a = b;
b = temp;
}
c
int main()
{
int a = 10;
char c = 'c';
mySwap(a, c); //错误
}
可以看到,编译器推出来了一个是int,一个是char,但类型不一致,不能让一个T同时代表两个类型。
- 模板必须要确定出T的类型,才能使用它
//2、模板必须要确定T的数据类型
template<typename T> //typename可以用class
void func()
{
cout << "func 调用" << endl;
}
int main()
{
func();
}
可以看到,调用func出错,这是因为func是一个模板函数,调用时必须要让编译器知道T的数据类型。而func并没有参数可以传,所以只能显式高数编译器T的类型:
int main()
{
//随便指定一个类型,就不再报错
func<int>();
}