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

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

模板(template)

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

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

例如:

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

函数模板

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

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

格式

规则

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

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

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

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

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

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

函数模板实例化

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

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

类模板

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

使用

特点

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

相关文章:

  • PyTorch 中 nn.Linear() 参数详解与实战解析(gpt)
  • 项目:数据库应用系统开发:智能电商管理系统
  • 认识 Spring AI
  • 【C++】简单学——STL简介(了解)
  • tauri v2 开源项目学习(一)
  • 安装bcolz包报错Cython.Compiler.Errors.CompileError: bcolz/carray_ext.pyx的解决方法
  • Android Telephony 网络状态中的 NAS 信息
  • 实战避坑:MyBatis中${}拼接如何优雅又安全?
  • RocketMQ第五节(springboot整合MQ)
  • C++ STL之string类
  • Spring 依赖注入:官方推荐方式及最佳实践
  • SpringBoot -- 自动配置原理
  • 高并发限流方案
  • demo01:基于 SpringMVC 的用户管理系统
  • 深入 ARM-Linux 的系统调用世界
  • Windows11系统中安装docker并配置docker镜像到pycharm中
  • 反射,枚举和lambda表达式
  • SpringBoot 启动入口深度解析:main方法执行全流程
  • 初等变换 线性代数
  • python中学物理实验模拟程序系列目录
  • Oracle 树形统计再进阶:类型多样性与高频类型分析(第三课)
  • 长短期记忆网络(LSTM):让神经网络拥有 “持久记忆力” 的神奇魔法
  • CppCon 2018 学习:An allocator is a handle to a heap Lessons learned from std::pmr
  • 【FineDataLink快速入门】01界面介绍-运维中心
  • jvm 锁升级机制
  • AI编程实战:Cursor黑科技全解析
  • AlpineLinux安装docker
  • 提示技术系列——思维树
  • 使用Verilog设计模块输出中位数,尽可能较少资源使用
  • Python 数据分析与机器学习入门 (五):Matplotlib 数据可视化基础