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

【C++】”如虎添翼“:模板初阶

泛型编程

C++中一种使用模板来实现代码重用和类型安全的编程范式。它允许程序员编写与数据类型无关的代码,从而可以用相同的代码逻辑处理不同的数据类型。模板是泛型编程的基础

模板分为两类:

  1. 函数模板:代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生 函数的特定类型版本

  2. 类模板

函数模板:

代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生 函数的特定类型版本

提供一个函数的模板,但是类型是不固定的,对于这种编程也叫泛型编程

Template<typename T1, typename T2,......,typename Tn>//模板格式template<typename T>//T是一个类型的名称,没有要求;typename是一个关键字,后面跟的是泛型类型的名字,typename也能换成class。typename T合起来就是一个模板参数
void Swap(T& left,T& right)
{T temp = left;left = right;right = temp;
}
template<typename T>
void Swap(T& left,T& right)
{T temp = left;left = right;right = temp;
}
int main()
{int x = 1, y = 2;double m = 1.1, n = 2.2;Swap(x,y);//这里两处函数调用,看似调用的是一个函数,但实际上时调用了两个函数(函数调用要建立栈帧,一个是int类型,一个double类型,类型大小都不一样,更不可能调用的是同一个函数了),这个可以从汇编层来观察Swap(m,n);return 0;
}

观察汇编代码发现,call的地址不一样,说明调用的不是同一个函数。

原理:

编译器通过你编写的模板,再根据你传入的参数,自行生成对应的函数,调用的就是这个编译器自行生成的函数

如果你传入两个参数,这两个参数的类型不一样,就需要写两个模板参数,否则编译会不通过

正确做法如下:

template<typename T1, typename T2>
void Swap(T1&left,T2&right)
{T1 temp = left;left = right;right = temp;
}
int main()
{int x = 1, y = 2;double m = 1.1, n = 2.2;Swap(x,n);Swap(m,y);return 0;
}

http://www.xdnf.cn/news/409825.html

相关文章:

  • AI-Agent@spring ai概览
  • 动态IP技术赋能业务创新:解锁企业数字化转型新维度
  • 智表 ZCELL 插件快速入门指南(原创)
  • 【Redis】SDS结构
  • Redis的IO多路复用
  • 驾驭智能浪潮:AI SEO赋能的操作指南
  • Swift实战:如何优雅地从二叉搜索树中挑出最接近的K个值
  • C++ 中介者模式详解
  • 【嵌入式系统设计师(软考中级)】第三章:嵌入式系统软件基础知识——①软件及操作系统基础
  • 需求变更控制不严,如何防止项目范围扩大
  • CATIA高效工作指南——常规配置篇(二)
  • 黑马k8s(四)
  • windows防火墙
  • 2025年best好用的3dsmax插件和脚本
  • [Java实战]Spring Boot 整合 Swagger2 (十六)
  • 面试题:C++虚函数可以是内联函数吗?
  • 如何选择和实施PLM系统以提升企业效率?三品PLM系统:驱动企业效率跃升
  • 专业课复习笔记 9
  • 【记录nginx请求头参数丢失问题】
  • Android学习总结之布局篇
  • 《算法导论(第4版)》阅读笔记:p32-p38
  • Git常用操作
  • 测试文章标题01
  • 安装Hadoop并运行WordCount程序
  • 在IDEA中导入gitee项目
  • MySQL 8.0 OCP 1Z0-908 题目解析(1)
  • CSS3 伪类和使用场景
  • Matlab 列车纵向滑模二阶自抗扰算法和PID对比
  • 2025爬虫实战技巧:高效数据采集方案
  • 云境天合土壤含水量监测仪器—查看土壤水分数据,掌握土壤墒情变化