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

【C++】简单学——模板初阶

模板(template)

泛型编程,让编译器把我们不想干的事情给干了

类似于typedef,解决了typedef使用不方便地原因(虽然看似写少了,其实只是编译器做多了)

例如:

生成两个栈,但是两个栈存储的类型不一样,那就只能写两个class了

函数模板

编译器根据你的需要,按照你的函数模板生成多几份不同的函数

可以类比函数参数,只不过函数参数传的是对象,函数模板传的是类型

格式

规则

  • 必须要让编译器在推演函数模板的时候可以推演出来

  • 模板不能声明和定义分离

    核心原因:两阶段编译(Two-Phase Lookup)

模板解析阶段
编译器在遇到模板定义时,只会进行语法检查(如括号匹配、关键词正确性),但不会生成具体代码。此时它不知道T的实际类型。

实例化阶段
当代码中实际使用模板(如MyTemplate<int>)时,编译器才根据具体类型int生成真正的代码(称为“实例化”)。此时需要完整的模板定义。

  • 模板和函数可以同时存在,如果说某种传参两种函数都可以走,调用的规则遵循:有现成先吃现成的------有现成的,但是不够匹配,有模板就吃编译器的-----如果有强制调用模板就选模板

函数模板实例化

隐式实例化:让编译器根据你的传参自己去推演

显示实例化:直接在函数名和参数列表中间加上类型

类模板

不能推演实例化了,只能指定

使用

特点

  • 在没有接触模板的情况下,一般类的名字就是对象的类型,但是类模板之后,对象的类型要加上显示实例化后的类,例如Stack<int> s1的类型是Stack<int>
  • 如果要做声明和定义分离,要给那个定义加上模板并且指定为显示实例化的函数,因为Stack不认识T
  • 声明和定义分离最好不要分离到两个文件,因为会特别挫,要到【C++】简单学——模板进阶讲
http://www.lqws.cn/news/584839.html

相关文章:

  • 中证500股指期货一手多少钱呢?风险如何?
  • 易语言-登录UI演示
  • 一个代理对象被调用时,方法调用的链路是怎样的?
  • 【Kafka使用方式以及原理】
  • 安卓获取图片(相机拍摄/相册选择)
  • Android Telephony 网络状态中的 NAS 信息
  • window显示驱动开发—在注册表中设置 DXGI 信息
  • 【C语言】知识总结·内存函数
  • 三态门Multisim电路仿真——硬件工程师笔记
  • 优雅草蜻蜓HR人才招聘系统v2.0.9上线概要 -优雅草新产品上线
  • Amazon Athena:无服务器交互式查询服务的终极解决方案
  • 33. 搜索旋转排序数组
  • pytorch底层原理学习--PyTorch 架构梳理
  • FreePDFv3.0.0:颠覆你的文献阅读习惯
  • 16014.rtsp推流服务器
  • C++ 第四阶段 STL 容器 - 第五讲:详解 std::set 与 std::unordered_set
  • TDH社区开发版安装教程
  • [学习]M-QAM的数学原理与调制解调原理详解(仿真示例)
  • [面试]手写题-Promise.all() Promise.race()
  • 机器学习20-线性网络思考
  • 第三十六章 CAN——控制器局域网络接口
  • 字节跳动 C++ QT PC客户端面试
  • 论文中用matplotlib画的图,如何保持大小一致。
  • Vue2中使用DHTMLX Gantt
  • 深入理解Webpack的灵魂:Tapable插件架构解析
  • 使用Dirichlet分布进行随机初始化
  • 文心大模型 4.5 系列开源首发:技术深度解析与应用指南
  • StackGAN(堆叠生成对抗网络)
  • vscode 改注释的颜色,默认是灰色的,想改成红色
  • Prompt Enginering