热门标签 | 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的开发环境。 ... [详细]
  • 优化ASM字节码操作:简化类转换与移除冗余指令
    本文探讨如何利用ASM框架进行字节码操作,以优化现有类的转换过程,简化复杂的转换逻辑,并移除不必要的加0操作。通过这些技术手段,可以显著提升代码性能和可维护性。 ... [详细]
  • 本文总结了2018年的关键成就,包括职业变动、购车、考取驾照等重要事件,并分享了读书、工作、家庭和朋友方面的感悟。同时,展望2019年,制定了健康、软实力提升和技术学习的具体目标。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解 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 程序。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 本文详细记录了在银河麒麟操作系统和龙芯架构上使用 Qt 5.15.2 进行项目打包时遇到的问题及解决方案,特别关注于 linuxdeployqt 工具的应用。 ... [详细]
  • 当在 Android 应用中使用 NDK 时,可能会遇到 java.lang.UnsatisfiedLinkError: Native method not found 的错误。本文将详细探讨该错误的原因及解决方案。 ... [详细]
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社区 版权所有