1.函数模板深入理解
- 编译器从函数模板通过具体类型产生不同的函数
- 编译器会对函数模板进行两次编译
- 在声明的地方对模板代码本身进行编译
- 对参数替换后的代码进行编译(编译时机:可能发生在定义对象或函数调用时)
- 注意事项:
- 函数模板本身不允许隐式类型转换
- 自动推导类型时,必须严格匹配
- 显示类型指定时,能够进行隐式类型转换
- 编程实验:隐式类型转换问题
#include <iostream>
using namespace std;
template <typename T>
T Max(T a, T b) // 模板函数,求两个数的最大值
{
return a > b ? a : b; // 直接返回值,返回对象,就像拷贝了一份返回去一样,返回引用是本身。
}
int main()
{
int i = 2;
int j = 3;
// 自动推导类型:
cout << Max(i, j) << endl;
//错误,两个参数类型不同,函数模板不允许隐式类型转换。
//cout << Max('a', 3) << endl;
// 正确,显示指定T为int类型,可将'a'隐式转为指定的int类型,指定返回值类型。
cout << Max<int>('a', 3) << endl;
system("pause");
return 0;
}
- 运行结果: