【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.mzph.cn/bicheng/80715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十五、多态与虚函数

十五、多态与虚函数 15.1 引言 面向对象编程的基本特征&#xff1a;数据抽象&#xff08;封装&#xff09;、继承、多态基于对象&#xff1a;我们创建类和对象&#xff0c;并向这些对象发送消息多态&#xff08;Polymorphism&#xff09;&#xff1a;指的是相同的接口、不同的…

点云特征提取的两大经典范式:Voxel-based 与 Pillar-based

点云特征提取的两大经典范式&#xff1a;Voxel-based 与 Pillar-based 在点云处理领域&#xff0c;尤其是针对 3D 目标检测任务&#xff0c;特征提取是核心环节之一。目前&#xff0c;Voxel-based&#xff08;体素化&#xff09;和 Pillar-based&#xff08;柱状化&#xff09…

前苹果首席设计官回顾了其在苹果的设计生涯、公司文化、标志性产品的背后故事

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

web 自动化之 selenium 元素四大操作三大切换等待

文章目录 一、元素的四大操作二、三大切换&等待1、切换窗口:当定位的元素不在当前窗口&#xff0c;则需要切换窗口2、切换iframe&#xff1a;当定位的元素在frame/iframe&#xff0c;则需要切换3、切换弹出窗口 一、元素的四大操作 1、输入 2、点击 3、获取文本 4、获取属…

window server 2012安装sql server2008 r2

执行sql server2008 r2安装目录下的setup 选择运行程序而不获取帮助 然后就是让人绝望的 只能先搞这个了&#xff0c;F*微软&#xff0c;自家软件不让正常安装 打开服务器管理器->添加角色和功能->选择Web 服务&#xff08;IIS&#xff09;->添加.NET Framework3.5 然…

【K8S学习之生命周期钩子】详细了解 postStart 和 preStop 生命周期钩子

0. 参考 Kubernetes容器生命周期 —— 钩子函数详解&#xff08;postStart、preStop&#xff09; - 人艰不拆_zmc - 博客园详解Kubernetes Pod优雅退出 - 人艰不拆_zmc - 博客园 1. Kubernetes 生命周期钩子概述 在 Kubernetes 中&#xff0c;生命周期钩子&#xff08;Lifec…

测试文章标题01

模型上下文协议&#xff08;Model Context Protocol, MCP&#xff09;深度解析 一、MCP的核心概念 模型上下文协议&#xff08;Model Context Protocol, MCP&#xff09;是一种用于规范机器学习模型与外部环境交互的标准化框架。其核心目标是通过定义统一的接口和数据格式&am…

kubuntu系统详解

Kubuntu 系统深度解析&#xff08;从系统架构到用户体验&#xff09; 一、定位与核心特性 Kubuntu 是 Ubuntu 的官方 KDE 衍生版&#xff0c;基于 Ubuntu 的稳定底层&#xff08;Debian 技术栈&#xff09;&#xff0c;搭载 KDE Plasma 桌面环境&#xff0c;主打 “功能丰富、…

cURL:通过URL传输数据的命令行工具库介绍

文章目录 1. 什么是 curl&#xff1f;2. 下载与安装 curl3. curl 的常见用法3.1 获取网页内容3.2 下载文件3.3 发送 POST 请求&#xff08;带表单数据&#xff09;3.4 发送带 JSON 的 POST 请求 1. 什么是 curl&#xff1f; cURL&#xff08;CommandLine URL&#xff09;是非常…

从零搭建AI工作站:Gemma3大模型本地部署+WebUI配置全套方案

文章目录 前言1. 安装Ollama2.Gemma3模型安装与运行3. 安装Open WebUI图形化界面3.1 Open WebUI安装运行3.2 添加模型3.3 多模态测试 4. 安装内网穿透工具5. 配置固定公网地址总结 前言 如今各家的AI大模型厮杀得如火如荼&#xff0c;每天都有新的突破。今天我要给大家安利一款…

Element Plus对话框(ElDialog)全面指南:打造灵活弹窗交互

&#x1f4cc; 开篇导语 对话框是Web应用中实现用户交互的核心组件之一&#xff0c;常用于信息确认、表单提交或详情展示。Element Plus的ElDialog组件以高扩展性和优雅动效著称&#xff0c;支持高度定制化开发。本文将从基础配置到进阶技巧&#xff0c;手把手教你掌握对话框组…

解决WSL、Ubuntu的.ico图标不正确显示缩略图

解决WSL、Ubuntu的.ico图标不正确显示缩略图 问题描述 Win10系统中由于更新了某些软件&#xff0c;篡改了默认的图像显示软件&#xff0c;导致WSL等软件未能成功显示图标&#xff0c;表现如下&#xff1a; 解决方法 将ico文件的默认打开方式更改为“画图”&#xff0c;如下…

[数据结构高阶]并查集初识、手撕、可以解决哪类问题?

标题&#xff1a;[数据结构高阶]并查集初识、手撕、可以解决哪类问题&#xff1f; 水墨不写bug 文章目录 一、认识并查集二、模拟实现并查集三、用并查集解决问题1、[省份的数量](https://leetcode.cn/problems/number-of-provinces/)2、[等式方程的可满足性](https://leetcode…

如何快速入门大模型?

学习大模型的流程是什么 &#xff1f; 提示词工程&#xff1a;只需掌握提问技巧即可使用大模型&#xff0c;通过优化提问方式获得更精准的模型输出套壳应用开发&#xff1a;在大模型生态上开发业务层产品&#xff08;如AI主播、AI小助手等&#xff09;&#xff0c;只需调用API…

《AI大模型应知应会100篇》第59篇:Flowise:无代码搭建大模型应用

第59篇&#xff1a;Flowise&#xff1a;无代码搭建大模型应用 摘要&#xff1a;本文将详细探讨 Flowise 无代码平台的核心特性、使用方法和最佳实践&#xff0c;提供从安装到部署的全流程指南&#xff0c;帮助开发者和非技术用户快速构建复杂的大模型应用。文章结合实战案例与配…

python打卡day23@浙大疏锦行

知识回顾: 1. 转化器和估计器的概念 2. 管道工程 3. ColumnTransformer和Pipeline类 作业&#xff1a; 整理下全部逻辑的先后顺序&#xff0c;看看能不能制作出适合所有机器学习的通用pipeline 一、导入数据库 import pandas as pd import numpy as np import matplo…

Vue.js框架的优缺点

别再让才华被埋没&#xff0c;别再让github 项目蒙尘&#xff01;github star 请点击 GitHub 在线专业服务直通车GitHub赋能精灵 - 艾米莉&#xff0c;立即加入这场席卷全球开发者的星光革命&#xff01;若你有快速提升github Star github 加星数的需求&#xff0c;访问taimili…

交易流水表的分库分表设计

交易流水表的分库分表设计需要结合业务特点、数据增长趋势和查询模式&#xff0c;以下是常见的分库分表策略及实施建议&#xff1a; 一、分库分表核心目标 解决性能瓶颈&#xff1a;应对高并发写入和查询压力。数据均衡分布&#xff1a;避免单库/单表数据倾斜。简化运维&#…

操作系统学习笔记第3章 (竟成)

第 3 章 内存管理 【考纲内容】 1.内存管理基础&#xff1a; 1.内存管理的基本概念&#xff1a;逻辑地址空间与物理地址空间&#xff1b;地址变换&#xff1b;内存共享&#xff1b;内存保护&#xff1b;内存分配与回收&#xff1b; 2.连续分配管理方式&#xff1b; 3.页式管理&…

中科院无人机导航物流配送的智能变革!LogisticsVLN:基于无人机视觉语言导航的低空终端配送系统

作者&#xff1a;Xinyuan Zhang, Yonglin Tian, Fei Lin, Yue Liu, Jing Ma, Kornlia Sra Szatmry, Fei-Yue Wang 单位&#xff1a;中国科学院大学人工智能学院&#xff0c;中科院自动化研究所多模态人工智能系统国家重点实验室&#xff0c;澳门科技大学创新工程学院工程科学系…