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

【C++语法】模版初阶

9. 模版初阶

  • 模板的作用:通过构建一个模子,让编译器依照这个模子构建不同类型但功能相同的代码
  • 模板分为函数模板和类模板

在这里插入图片描述

函数模版

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

  • 使用格式:

    在这里插入图片描述

  • 使用举例:

    在这里插入图片描述

  • 函数模板注意:

    1. typename是关键字,要写,可以用class替代(但不能用struct替代)
    2. 虽然都是由同一个函数模板创建的函数,但由于类型不同,不同类型创建的函数并不是同一函数
    3. 编译器并不是用函数模板执行函数代码,而是用函数模板创建相应类型函数后调用该类型函数执行代码
  • 函数模板与用函数模板创建的函数之间的关系

    编译器在编译阶段,编译器根据传入的实参类型来推演生成所需要创建的函数以供调用

    注意:编译器仅能通过实参类型来判断,不能通过返回值类型判断

在这里插入图片描述

  • 函数模板的实例化
    函数模板的实例化可以直接指定形参类型,不需要通过实参类型进行推演,此时如果实参类型与形参类型不一致就会发生隐式类型转换,该过程发生在函数调用中
    注意:在模板中,编译器一般不会进行类型转换,只有在实例化(指定形参类型)的时候,实参才会根据形参类型进行隐式类型转换

在这里插入图片描述

如下边代码所示:
1>可以存在同函数名的函数模板,在函数调用时会根据形参的类型自动判断该根据哪一种类型的函数模板生成函数
2>函数的返回值类型可以为auto类型,此时返回值类型由编译器判断

在这里插入图片描述

我们来看下面一个代码:

在这里插入图片描述

在这个代码中,函数模版的参数必须使用const修饰才能让不同类型的变量使用,其中发生了隐式类型转换

  • 函数模版匹配原则

    1>同名的非模板函数和函数模板可以同时存在,并且函数模板还可以实例化为这个非模板函数
    2>函数调用存在一下优先级顺序

对于非模板函数和同名函数模板,如果其他条件都相同,在调动时会优先调用非模板函数而不会从该模板产生出一个实例。如果模板可以产生一个具有更好匹配的函数,那么将选择模板

在这里插入图片描述

​ 3>模板函数不允许自动类型转换,但普通函数可以进行自动类型转换

在这里插入图片描述

在这里插入图片描述

http://www.dtcms.com/a/383923.html

相关文章:

  • 机械制造工艺指南
  • Wi-Fi技术——Power SAVE模式
  • leetcode39(相同的树)
  • C++(虚函数表原理和菱形继承)
  • 【STM32项目开源】STM32单片机智能语音风扇控制系统
  • [Android]自定义view
  • 线程和进程,以及GCD的简单使用
  • C++_STL和数据结构《1》_STL、STL的迭代器、c++中的模版、STL的容器、列表初始化、三个算法、链表
  • 学习日报|线程池专题学习总结
  • kubectl 报错 couldn‘t get current server API group list:
  • 求最小公倍数(GCD)和最大公约数(LCM)——原理和代码
  • 单调栈数据结构
  • OceanBase V4.3.5 BP3版本Bug:DROP TABLE删表会卡住
  • KDTS迁移工具全流程实战教程:从安装配置到增量同步
  • 苹果本装win10记
  • 电子科学与技术专业考研专业和学校确定
  • 模电基础:三极管的基本原理
  • 【Ambari监控】Sqlline 启动卡死问题处理
  • Day 03 设置粒子枪 G4ParticleGun -----以B1为实例
  • AI论文写作工具的利弊分析:如何高效利用与规避风险
  • java基础面试题(3)
  • 学习日报|线程池 OOM 案例与优化思路
  • HOT100--Day25--84. 柱状图中最大的矩形,215. 数组中的第K个最大元素,347. 前 K 个高频元素
  • Linux网络:socket编程UDP
  • GeoHash分级索引技术
  • RISC与CISC:ARM指令集解析
  • 第十二篇:Qcom Camx打印实时帧率 FPS
  • 【开题答辩全过程】以 “候鸟式养老机构”管理系统的设计与实践为例,包含答辩的问题和答案
  • 造车阶段解读
  • 技术论文分析分析论文《计算机病毒判定专家系统原理与设计》思考其在游戏中的应用