c++template-基础篇(一)

什么是函数模板?

函数模板提供了一种函数行为,该函数行为可以用多种不同的类型进行调用,它和普通函数很相似,唯一的区别就是有些函数元素是未确定的,这些元素将在使用时被参数化。

一个简单的函数模板
template <typename T>
inline T const& max(T const&a, T const&b)
{
    return a<b?b:a;
}

只要使用函数模板,编译器会自动地引发一个实例化过程,使用者不需要额外地请求模板的实例化。

编译过程中,模板会被编译两次,分别是:

  • 实例化之前,先检查模块代码本身,查看语法是否正确,比如遗漏;等错误是在这里发现的。
  • 实例化期间, 检查模块代码,查看是否所有的调用都有效。

一定要让所有的函数模板的声明在被调用的位置之前!

重载函数模板实例化顺序
  • 一个非模板函数和一个同名的模板函数同时存在时,一般条件相同时会先实例化非模板函数
  • 然而,如果模板可以产生一个更好匹配的函数,那么将选择模板
  • 可以显示地指定一个空的模板实参列表,表明只有模板来匹配该调用, 而且所有的模板参数都应该根据实参演绎出来
  • 模板不允许自动类型转换;但是普通函数可以进行自动类型转换,所以调用需要自动类型转换的将使用非模板函数。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容