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

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

模板(template)

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

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

例如:

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

函数模板

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

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

格式

规则

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

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

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

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

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

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

函数模板实例化

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

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

类模板

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

使用

特点

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

相关文章:

  • tauri v2 开源项目学习(一)
  • PSQL 处理 BLOB 类型数据问题
  • 华为云Flexus+DeepSeek征文 | ​​华为云ModelArts Studio大模型与企业AI会议纪要场景的对接方案
  • 数据库事务全面指南:概念、语法、机制与最佳实践
  • C++ 快速回顾(五)
  • 【冷知识】Spring Boot 配置文件外置
  • SpringBoot -- 自动配置原理
  • Bessel位势方程求解步骤
  • STL简介+string模拟实现
  • 「Java案例」计算矩形面积
  • 大数据(3)-Hive
  • 【算法】动态规划:1137. 第 N 个泰波那契数
  • 初等变换 线性代数
  • C++ STL之string类
  • Windows11系统中安装docker并配置docker镜像到pycharm中
  • EA自动交易完全指南:从策略设计到实盘部署
  • SpringBoot 启动入口深度解析:main方法执行全流程
  • Android Telephony 网络状态中的 NAS 信息
  • 反射,枚举和lambda表达式
  • 《垒球百科》老年俱乐部有哪些项目·垒球1号位
  • 从零到一通过Web技术开发一个五子棋
  • 【MySQL基础】MySQL索引全面解析:从原理到实践
  • 人形机器人_双足行走动力学:MIT机器人跌落自恢复算法及应用
  • 使用Verilog设计模块输出中位数,尽可能较少资源使用
  • 本周股指想法
  • 产品背景知识——API、SDK、Library、Framework、Protocol
  • 10.【C语言学习笔记】指针(二)
  • Python 数据分析与机器学习入门 (八):用 Scikit-Learn 跑通第一个机器学习模型
  • stm32达到什么程度叫精通?
  • 百度文心大模型4.5系列正式开源,开源会给百度带来什么?