C++伟大发明--模版

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

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

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

函数模版

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

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

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

函数模版的实例化

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

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

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

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

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

模板参数的匹配原则

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

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

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

类模版

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

相关推荐
Chester_19994 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
EXI-小洲5 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
会周易的程序员6 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
机器视觉知识推荐、就业指导6 小时前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt
telepan6 小时前
Qt 开发避坑与性能指南:如何优雅、安全地定义全局常量字符串?
开发语言·qt
小灰灰搞电子6 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化6 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
m0_695251496 小时前
Qt MaintenanceTool 使用国内镜像加速下载(超详细教程)
开发语言·qt
大衛說7 小时前
《Python 从入门到精通》系列总览与学习路线
开发语言·python·学习
学习星球8 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode