热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

C/C++(7.模板初阶)

你儿时的心愿, 现在的理想, 这些都是你要追逐的东西, 你可要放弃很多, 但唯独不能放弃自己的理想, 因为理想代表的就是你自己. 看一个人能否做自己, 就看他是否坚持了自己的理想, 坚持了多久. 如

你儿时的心愿, 现在的理想, 这些都是你要追逐的东西, 你可要放弃很多,
但唯独不能放弃自己的理想, 因为理想代表的就是你自己.
看一个人能否做自己, 就看他是否坚持了自己的理想, 坚持了多久.
如果你现在有梦, 请你一定要去追.

7. 模板初阶
7.1 泛型编程7.1.1 定义编写与类型无关的通用代码,是代码复用的一种手段,模板是泛型编程的基础。7.1.2 模板的分类函数模板类模板7.1.3 模板编译的两个阶段(1)实例化前--只读模板进行简单语法检测;(2)实例化后--编译器就会根据T的实际类型来生成代码。
7.2 函数模板7.2.1 定义函数模板代表了一个函数家族&#xff0c;该函数模板与类型无关&#xff0c;在使用时被参数化&#xff0c;根据实参类型产生函数的特定 类型版本。7.2.2 格式template<typename T1, typename T2,......,typename Tn> 返回值类型 函数名(参数列表){} 尖括号中先写关键字typename&#xff08;或class&#xff09;&#xff0c;后面跟一个类型参数T&#xff0c;这个类型参数实际上是一个虚拟的类型名&#xff0c;表示模板中出现的T是一个类型名&#xff0c;但是现在并未指定它是哪一种具体的类型&#xff1b;注意&#xff1a;typename是用来定义模板参数关键字&#xff0c;也可以使用class(切记&#xff1a;不能使用struct代替class)&#xff0c;建议使用typename7.2.3 原理&#xff08;1&#xff09;模板是一个蓝图&#xff0c;它本身并不是函数&#xff0c;是编译器用使用方式产生特定具体类型函数的模具。所以其实模板就 是将本来应该我们做的重复的事情交给了编译。&#xff08;2&#xff09;在编译阶段&#xff0c;编译器需要对实参的类型进行推演&#xff0c;来确认模板参数的列表中T的实际类型&#xff0c;最后生成处理具体类型的有效代码。7.2.4 函数模板的实例化&#xff08;用不同类型的参数使用函数模板时&#xff0c;称为函数模板的实例化&#xff09;隐式实例化让编译器根据实参推演模板参数的实际类型&#xff1b;显式实例化在函数名后的<>中指定模板参数的实际类型&#xff1b;7.2.5 模板参数的匹配原则一个非模板函数可以和一个同名的函数模板同时存在&#xff0c;而且该函数模板还可以被是被实例化为这个非模板函数&#xff1b;对于非模板函数和同名函数模板&#xff0c;如果其他条件都相同&#xff0c;在调动时会优先调用非模板函数而不会从该模板产生出一个实例&#xff0c;如果模板可以产生一个具有更好匹配的函数&#xff0c;那么将选择模板&#xff1b;模板函数不允许自动类型转换&#xff0c;但普通函数可以进行自动类型转换&#xff1b;
7.3 类模板&#xff08;1&#xff09;类模板的定义格式template<typename T1,typename T2...typename T1,typename Tn>class 类模板名{}&#xff08;2&#xff09;类模板的实例化类模板实例化与函数模板实例化不同&#xff0c;类模板实例化需要在类模板名字后跟<>,然后将实例化的类型放在<>中即可&#xff0c;类模板名字不是真正的类&#xff0c;而实例化的结果才是真正的类&#xff1b;


推荐阅读
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 本文详细介绍了macOS系统的核心组件,包括如何管理其安全特性——系统完整性保护(SIP),并探讨了不同版本的更新亮点。对于使用macOS系统的用户来说,了解这些信息有助于更好地管理和优化系统性能。 ... [详细]
  • Google最新推出的嵌入AI技术的便携式相机Clips现已上架,旨在通过人工智能技术自动捕捉用户生活中值得纪念的时刻,帮助人们减少照片数量过多的问题。 ... [详细]
  • 本文深入探讨了 Java 编程语言的基础,特别是其跨平台特性和 JVM 的工作原理。通过介绍 Java 的发展历史和生态系统,帮助初学者理解如何编写并运行第一个 Java 程序。 ... [详细]
  • Linux设备驱动程序:异步时间操作与调度机制
    本文介绍了Linux内核中的几种异步延迟操作方法,包括内核定时器、tasklet机制和工作队列。这些机制允许在未来的某个时间点执行任务,而无需阻塞当前线程,从而提高系统的响应性和效率。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 本文深入探讨了C++对象模型中的一些细节问题,特别是虚拟继承和析构函数的处理。通过具体代码示例和详细分析,揭示了书中某些观点的不足之处,并提供了更合理的解释。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 在过去两周中,我们利用 ReportViewer 开发了与生产良率相关的报表,其中每个制程的直通率是所有测试项良率的乘积。由于 ReportViewer 没有内置的累乘函数,因此需要借助自定义代码来实现这一功能。本文将详细介绍实现步骤和相关代码。 ... [详细]
  • ###问题删除目录时遇到错误提示:rm:cannotremoveusrlocaltmp’:Directorynotempty即使用rm-rf,还是会出现 ... [详细]
author-avatar
Li修贤_594
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有