使用指针时:函数模板的特例化
加上头文件#include <cstring>
template<>
const char * const& max(const char * const& a,const char * const& b)
{
return strcmp(a,b) > 0 ? a : b;
}
模板和自定义函数同时存在时,系统优先调用自定义函数
模板也可重载:
template<typename T>
const T& max(const T& a,const T& b,const T& c)
{
return (a > b ? a :b) > c ? (a > b ? a : b) : c;
}
模板的特例化也可重载:
const char * const& max(const char * const& a,const char * const& b)
{
return strcmp(a,b) > 0 ? a : b;
}
①函数模板不是函数,不能被执行
②置换代码中的类型参数得到模板函数---实例化
③实例化后的模板函数是真正的函数,可以被执行
函数模板---->实例化---->模板函数
模板被变异了两次:
①实例化之前,先检查模板代码本身,语法检查
②实例化期间,检查模板代码,查看是否所有的调用都有效