C++伟大发明--模版

C++起初是不受外界关注的,别人觉得他和C语言没有本质上的区别,只是方便些,直到祖师爷发明了模版,开始和C语言有了根本的区别。

我们通过一个小小的例子来搞清楚什么是模版,模版的作用到底有多大,平时我们想要写交换函数是不是这样写的。

我们一般要通过函数重载来实现,但是这样做有两个坏处,第一是,代码的复用率不高,如果遇到其他情况我们也要自己重新写函数,第二,程序很难维护,一个地方出错可能全部要重新写,维护成本极高,所以,我们就使用模版,可以很好的解决这个困扰。

函数模版

模版到底是什么?模版一般有两种,一种是函数模版,一种是类模版。我们通过一组图片来表示什么是模版

函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。我们看看函数模版怎么创建吧。

函数模版并不是函数,他只是一个模版,把我们应该重复做的事情交给了编译器

函数模版的实例化

实例化又分为隐式实例化和显式实例化,隐式实例化是不告诉编译器我要传什么类型的参数,让编译器自己去推测参数类型,我们看看是怎么实例化的吧。

就像上面这样,实例化就直接用就可以了,其他的编译器都替你做了,但是如果我们两边的参数传的不同的类型的怎么办,

结果就是报错了,我们的解决办法是啥呢?第一就是,强制类型转换,

还有一种就是我们上面提到的显式实例化,在函数名后的<>中指定模板参数的实际类型。我们用代码来看看怎么使用。

如果类型不匹配,编译器会进行隐式类型转换,如果还不行,那么编译器就会报错。

模板参数的匹配原则

  1. 一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数。

  2. 对于非模板函数和同名函数模板,如果其他条件都相同,在调动时会优先调用非模板函数而不会从该模板产生出一个实例。如果模板可以产生一个具有更好匹配的函数, 那么将选择模板。

  3. 模板函数不允许自动类型转换,但普通函数可以进行自动类型转换

类模版

类模版其实和函数模版也没什么差,大家看看代码就知道是什么用法了。

相关推荐
码匠许师傅4 小时前
【C++ 面试真题】C++ 的 const 和 constexpr 有什么区别?
c++·面试
BUG研究员_6 小时前
Runnable与LCEL
开发语言·人工智能·python
果果燕7 小时前
实习笔记(一):NFS、Samba、VNC、Git、CMake、systemd、内核、交叉编译
linux·arm开发·c++·笔记·git
牛艺翔7 小时前
C++基础
开发语言·c++
键盘会跳舞7 小时前
C++ :容器适配器stack源码级拆解
开发语言·c++··stack·先进后出
美味蛋炒饭.8 小时前
Git 版本控制(下)
开发语言·git·学习·总结·后端开发
我星期八休息8 小时前
网络编程—网络层
开发语言·前端·网络·人工智能·智能路由器
问商十三载8 小时前
RAG 检索效果差怎么排查?2026 五层诊断法完整指南
开发语言·人工智能·windows·python·算法
不负岁月无痕8 小时前
简单理解操作系统结构
java·linux·c语言·开发语言·c++·面试
余额瞒着我当琳8 小时前
C++模板初阶与STL初探
android·java·c++