模板函数
template<typename T>
template<class T>
template<class T1, class T2, class T3>
void MySwap(T&a,T&b){
T temp=a;
a=b;
b=temp;
}
// 调用
// 自动类型推导:编译器根据传递的值进行自动类型推导
int a,b;
MySwap(a, b);
//显式指定类型
MySwap<int>(a, b);
普通函数可以进行自动类型转换
函数模板必须严格匹配类型
函数模板可以像普通函数那样被重载
c++编译器优先考虑普通函数
c++编译过程
index.cpp->预编译器->index.i->编译器->index.s(汇编文件)->汇编器->目标文件.obj/.o->链接器->可执行文件
模板函数使用原理剖析
程序会根据函数模板的调用情况生成相应的模板函数。
编译器并不是把函数模板编译成能够处理所有类型的模板函数
编译器会对函数模板进行两次编译,在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译