当前位置: 首页 > article >正文

C++伟大发明--模版

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

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

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

函数模版

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

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

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

 函数模版的实例化

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

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

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

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

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

模板参数的匹配原则
 

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

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

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

类模版 

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


http://www.kler.cn/news/310572.html

相关文章:

  • 使用大语言模型(LLM)修正小段乱码(Mojibake)为正常文本
  • expected_conditions(EC) 判断元素的操作
  • OpenCVSharp直方图和傅里叶变换介绍
  • 2024.9.15 Python模式识别新国大EE5907,总结PCA,LDA,Clustering,GMMboosting,SVM
  • istio中serviceentry结合egressgateway的使用
  • 求和(2)
  • C# 禁止程序重复启动
  • 科技创新驱动未来发展
  • Qt 内嵌 Python 解释器动态调试
  • canvas和svg的区别是什么?它们的应用场景是什么?
  • github域名与IP变更导致无法推送分支问题的解决
  • QT信号槽原理是什么,如何去使用它?
  • POSIX信号量以及利用POSIX信号量实现基于循环队列的高效生产者消费者模型
  • 【iOS】dismiss多级的方法
  • 《A++ 敏捷开发》- 26 根与翼
  • 如何使用自动化测试工具来提高API测试的效率?
  • html详细知识
  • Android中的单例模式
  • 怎么给儿童掏耳朵比较安全?安全儿童可视挖耳勺推荐
  • 价值、创新、社区与财富效应:Match项目的成功启示
  • 【网络安全】PHP配置注入漏洞
  • php环境搭建教程
  • float字节序和主机序 网络序传输
  • 优化算法(三)—模拟退火算法(附MATLAB程序)
  • Vue学习记录之四(watch侦听器和watchEffect高级侦听器)
  • Window Server 2019+ 安装 Docker
  • 【数据分析】利用Python+AI+工作流实现自动化数据分析-全流程讲解
  • Vue3流程图插件-Vue Flow
  • supermap iclient3d for cesium中的平移,旋转
  • Linux嵌入式相机 — 项目总结