【C++】模版详解

news2024/9/19 10:36:05

1、概念

C++模版分两类:函数模版和类模版
1)函数模板的格式

template <class 形参名,class 形参名,......> 返回类型 函数名(参数列表)
{
    函数体
}

例如:

template <class T> void swap(T& a, T& b)
{
	T t = a;
	a = b;
	b = t;
}

2)类模版的格式

template<class  形参名,class 形参名,…>   class 类名
{ ... };

例如:

template<class T> class A
{
public: 
	T a; 
	T b; 
	T add(T &c, T &d);
};

注意:模板的声明或定义只能在全局,命名空间或类范围内进行。即不能在局部范围,函数内进行,比如不能在main函数中声明或定义一个模板。

C++模版概念参见博客:https://blog.csdn.net/qq_52905520/article/details/127455728

2、模版的编译

1)预处理
模版虽然和宏相似,但是模版是在编译阶段处理的,而不是在预处理阶段。
下面是执行预处理的结果:(g++ -E AddDouble.cpp -o AddDouble.i)
在这里插入图片描述
2)编译
模版在不同的源码中,被实例化为相同的类型时,会产生很多重复的代码。
例如在两个源码中使用了模版实例化为相同的类型(int),后编译为汇编代码时(g++ -S),产生的函数标志相同:_Z7addTempIiET_S0_S0_
在这里插入图片描述

3)链接
重复代码消除:模版在不同的源码中,被实例化为相同的类型时,会产生很多重复的代码,C++编译器在链接时,会消除重复的代码。
在这里插入图片描述
查看汇编代码,可以看到 模版函数被标记为 comdat

什么是comdat?
comdat(Common Data Area)是链接器用来处理重复代码和数据的一种机制,它允许链接器在生成最终的可执行文件或库时,合并(或“折叠”)相同的函数和数据定义,以减少最终程序的大小。

comdat 的工作原理:

  • 编译时:当使用编译器编译C++代码时,编译器会识别出可以安全合并的代码和数据(如内联函数、模板实例化等),并将它们放置在带有comdat属性的段中。
  • 链接时:链接器遍历所有输入对象文件(.obj),查找带有comdat属性的段。对于每个comdat段,链接器会检查是否已经有一个相同的段被包含在了最终的程序中。如果是,链接器会丢弃当前遇到的这个段,因为它已经被之前的某个段所代表。这样,相同的代码或数据只会在最终的程序中出现一次。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1994991.html

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

相关文章

android13 关闭selinux 临时关闭或者永久关闭

总纲 android13 rom 开发总纲说明 目录 1.前言 2.情况分析 2.1 临时关闭 2.2 永久关闭 3.修改方法 3.1 临时修改 3.2 永久关闭 4.编译测试 5.彩蛋 1.前言 在Android操作系统中,SELinux(Security-Enhanced Linux)是一种安全模块,用于提供强制访问控制(MAC)安全…

为什么不用postman做自动化

面试的时候被问到&#xff1a;为什么不用postman做自动化 打开postman&#xff0c;看到用例集管理、API 管理、环境管理这三个功能&#xff0c;用户体验感算得上品牌等级了 为什么不用呢&#xff0c;文心一言给了一些答案 不适合大规模自动化测试&#xff1a;Postman 主要是为…

AI大模型排行榜(gpt-4o-2024-08-06)

https://github.com/yuchenlin/ZeroEval/blob/main/result_dirs/mmlu-redux.summary.md 人工智能学习网站 https://chat.xutongbao.top

学习日志8.8--防火墙精细化策略管控

本次实验的拓扑结构&#xff0c;用PC2去模拟和外部网络连接的Internet。 在trust和untrust区域上&#xff0c;希望将防火墙安全策略的默认动作修改为deny&#xff0c;然后精细化控制流量的访问&#xff0c;从trust到untrust控制只允许192.168.1.0的网络通过&#xff0c;从untr…

Spring Boot 3.x Filter实战:记录请求日志

上一篇&#xff1a;Spring Boot 3.x Web单元测试最佳实践 前面我们在《Spring Boot 3.x Rest API最佳实践之统一响应结构》中学习响应的统一拦截处理&#xff0c;顺带完成了响应结果的记录&#xff1b;而对于请求内容咱们也必须进行日志记录&#xff0c;以确保排查问题时有据可…

又一苹果经典产品宣布停产,老用户满满的回忆

苹果公司的SuperDrive&#xff0c;作为一项曾经引领潮流的外置光驱技术&#xff0c;自2008年伴随着革命性的MacBook Air轻盈登场以来&#xff0c;便成为了苹果电脑产品线中一道亮丽的风景线&#xff0c;象征着科技与美学的完美结合。 这款光驱以其超薄的设计、高效的读写速度以…

leetcode787. K 站中转内最便宜的航班——优先队列优化的Dijkstra算法+剪枝

题目 leetcode787. K 站中转内最便宜的航班 题目分析 给定一个城市图&#xff0c;每个城市通过航班与其他城市相连。每个航班都有一个起点、终点和价格。你需要找到从起点城市 src 到终点城市 dst 的最便宜路径&#xff0c;但这条路径最多只能经过 k 个中转站。你需要返回这…

构建智能生态,视频监控/安防监控EasyCVR视频汇聚流媒体技术在智能分析领域的应用

随着5G、AI、物联网&#xff08;IoT&#xff09;、云计算等技术的快速发展&#xff0c;万物互联的时代已经到来&#xff0c;全新的行业生态AIoT正在引领一场深刻的变革。在这场变革中&#xff0c;EasyCVR视频流媒体技术以其强大的视频处理、汇聚与融合能力&#xff0c;在智能分…

2024年计算机类学术会议有哪些

随着科技的飞速发展&#xff0c;计算机科学与技术领域正以前所未有的速度进步&#xff0c;各类学术会议成为了交流最新研究成果、探讨前沿技术趋势的重要平台。2024年&#xff0c;全球范围内将举办多场计算机类学术会议&#xff0c;这些会议不仅汇聚了顶尖的专家学者&#xff0…

创客匠人老蒋:你缺的不是客户,缺的是单个客户的营销和变现能力

老蒋创客圈第58期对话标杆直播连麦&#xff0c;我们邀请到【拾才易人】平台创始人侯邦辉老师。侯老师与创客匠人合作3年之久&#xff0c;实现了线上线下高转化&#xff0c;并实现家庭教育、心理疗愈、国学传承与营销运营一站式学习平台。 上篇文章&#xff0c;我们主要梳理了连…

Gemma Scope 帮助理解 AI 模型的内部工作原理

Gemma Scope 工具如何帮助理解 AI 模型&#xff08;具体来说是 Gemma 模型&#xff09;的内部工作原理&#xff0c;通过观察模型的“特征”来理解 AI 是如何“思考”的 1 特征&#xff08;features&#xff09; 了解AI模型在思考什么。Gemma Scope 将 Gemma 模型的大脑分解成…

延时队列与redis and rabbitmq

延时队列是什么 延时队列&#xff08;Delay Queue&#xff09;是一种特殊的消息队列&#xff0c;它允许你在添加消息时设置一个延时时间&#xff0c;消息只有在延时时间到达后才能被消费。这种机制在分布式系统中非常有用&#xff0c;常用于处理需要在指定时间后执行的任务&am…

光耦合器知识概述

光耦合器&#xff0c;又称光电耦合器&#xff0c;是一种通过光信号来实现电信号隔离的电子元件。它在确保电路安全和信号完整性方面起着关键作用&#xff0c;广泛应用于电源管理、工业自动化、消费电子等领域。本文将深入探讨光耦合器的工作原理、技术参数、应用场景、选型指南…

【JAVA入门】Day19 - BigInteger 和 BigDecimal

【JAVA入门】Day19 - BigInteger 和 BigDecimal 文章目录 【JAVA入门】Day19 - BigInteger 和 BigDecimal一、BigInteger1.1 BigInteger 构造方法1.2 BigInteger 内部常见方法 二、BigDecimal2.1 BigDecimal 的作用2.2 BigDecimal 对象的获取2.3 BigDecimal 中常见的成员方法2.…

自动驾驶计算芯片企业“流血”上市,小米、腾讯等曾投7亿美元

"自动驾驶市场何时迎来爆发&#xff1f;" 作者 | 魏 强 编辑 | 卢旭成 今天&#xff0c;自动驾驶计算芯片企业Black Sesame International HoldingLimited(黑芝麻智能)在港交所上市&#xff0c;发行价28港元&#xff0c;募资总额10.36亿港元。 黑芝麻智能号称国…

牛客周赛 Round 54 (个人题解)(待补全)

前言&#xff1a; 如今已经回到返校回家&#xff0c;在家中的学习热情明显下降&#xff0c;在加上练车、和朋友亲戚聚一聚&#xff0c;学习的时间明显下降&#xff0c;希望自己能更加努力一点吧&#xff0c;之后想通过发博客来监督自己在暑假家中的努力&#xff0c;希望自己能做…

剖析算法内部结构----------贪心算法

什么是贪心算法&#xff1f; 贪心算法&#xff08;Greedy Algorithm&#xff09;是一种在问题求解过程中&#xff0c;每一步都采取当前状态下最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致最终的全局最优解的算法策略。 贪心算法的核心思想是做选择时&…

Elasticsearch 查询规则现已正式发布 - query rules

作者&#xff1a;来自 Elastic Kathleen DeRusso 查询规则&#xff08;query rules&#xff09;允许使用细粒度、上下文特定的解决方案来更改特定查询或搜索用例的搜索结果。这对于需要将品牌或赞助结果固定在特定关键字的搜索结果列表顶部的广告系列很有帮助&#xff0c;但对于…

B2 双电机系列挂轨巡检机器人:解决巡检难题,提升工业效能

随着工业自动化的不断发展&#xff0c;传统的人工巡检方式已经难以满足现代工业对安全、效率和精度的要求。旗晟机器人推出的B2双电机系列挂轨巡检机器人&#xff0c;以其独特的优势&#xff0c;为工业巡检领域带来了革命性的变化。 一、产品亮点 B2双电机系列挂轨巡检机器人以…

数据结构初阶最终讲:排序

数据结构初阶最终讲&#xff1a;排序 1.排序的概念及其运用1.1什么是排序1.2排序的运用1.3常见排序算法 2.冒泡排序3.直接插入排序4.堆排序5.测试代码&#xff1a;排序性能对比5.1直接插入排序时间复杂度分析 6.希尔排序6.1希尔排序时间复杂度分析 7.选择排序7.1初步思路7.2选择…