C++ 函数模板

2023-11-01

函数模板是通用的函数描述,它们使用泛型来定义函数,其中的泛型可用具体的类型替换。通过将类型作为参数传递给模板,可使编译器生成该类型的函数。由于模板允许以泛型(而不是具体类型)的方式编写程序,因此有时候也被称为通用编程。

在标准C++98添加关键字typename之前,C++使用关键字class来创建模板。例如:

在C++11中,可以将class替换为typename。

 

调用该函数模板:

 

 

重载的函数模板

例如:

 

模板的显示具体化

假设有一个结构体,C++允许将一个结构体赋给另一个结构体,如果只想交换其中部分成员,则需要不同的代码。

可以提供一个具体化函数定义——显示具体化。当编译器找到与函数调用匹配的具体化时,将使用该定义,而不再寻找模板。

1. 对于给定的函数名,可以有非模板函数,模板函数,和显示具体化函数以及它们的重载版本。

2.显示具体化的原型和定义应以template<>打头,并通过名称来指出类型。

3.具体化优先于常规模板,非模板函数优先于具体化和模板函数。

例如:

 

实例化:

函数调用swap(i,j)导致编译器生成swap()的一个实例,该实例使用int类型。

模板并非函数定义,但使用int的模板实例就是函数定义,这种实例化方式被称为隐式实例化。

C++允许显示实例化,template void swap<int>(int&, int & )

 

编译器选择使用哪个函数版本

对于函数重载,函数模板,函数模板重载,C++有定义一个良好的策略,来决定为函数调用使用哪一个函数定义,尤其是有多个参数时,这个过程称为重载解析。

1.完全匹配,但常规函数优先于模板。

2.提升转换(char 与short自动转换为int,float自动转换为double)。

3.标准转换(int转换为char,long转换为double)。

4.用户定义的转换,如类声明中定义的转换。

 

函数的变量类型与返回类型

函数有多个参数类型时

x + y 的类型无法预测出来,使用decltype关键字来猜测类型。

 

如果函数有返回值类型:无法预先知道x + y的类型,此时还未声明参数x 和 y,他们不在作用域内(编译器无法看到它们,无法使用它们)。必须在声明参数后使用decltype。

现在,decltype在参数后边声明,因此x, y位于作用域内,可以使用它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 函数模板 的相关文章

  • 背完这444句,你的口语绝对不成问题了

    1 I see 我明白了 2 I quit 我不干了 3 Let go 放手 4 Me too 我也是 5 My god 天哪 6 No way 不行 7 Come on 来吧 赶快 8 Hold on 等一等 9 I agree 我同意
  • 公共数据运营模式研究报告 附下载

    本报告以公共数据运营模式为核心 以释放公共数据价值为目标 深入分析公共数据概念及特征 厘清公共数据运营的内涵及本质 提出纵深分域数据要素市场运营体系的总体思路 构建了一座 一个数据底座 两场 两级市场 三域 三个区域 四链 四个链条 的运营
  • Vue(踩坑)Error in render “TypeError Cannot read properties of undefined (reading ‘length‘)“

    我在网上搜了好久 说是我层级太深了 taskfillist我在vuex中的state中定义的是一个空数组 div 解决办法 在组件mounted过程中 taskfillist声明的空数组 在taskfillist length前面增加tas
  • MERN堆栈

    转自GeeksforGeeks的 Jasraj MERN Stack 翻译 MERN堆栈 MERN堆栈 是一个 Javascript 堆栈 用于更轻松 更快速地部署全栈Web应用程序 MERN堆栈包含 4 项技术 即 MongoDB Exp
  • 基于LIRI数据集的R语言探索:优化分析和可视化技巧

    基于LIRI数据集的R语言探索 优化分析和可视化技巧 引言 在数据科学和数据分析领域 R语言一直以来都是最受欢迎的工具之一 本文将使用LIRI数据集作为案例 介绍如何使用R语言进行数据分析和可视化 我们将涵盖数据清洗 特征提取 探索性数据分
  • 【matlab】中取矩阵的某一行某一列

    1 操作指令 取某一行 Ki K i 取某一列 Kj K j 取某几行 Kij K i j 取某几列 Kij K i j i和j表示行数和列数 2 举例分析 例如矩阵K 1 2 3 4 5 6 7 8 9 三行三列 K 1 2 3 4 5
  • 【C语言】指针题及解析

    需要云服务器等云产品来学习Linux的同学可以移步 gt 腾讯云 lt gt 阿里云 lt gt 华为云 lt 官网 轻量型云服务器低至112元 年 新用户首次下单享超低折扣 例一 需要考虑大小端问题 该例仅限32位平台 小端存储模式 in
  • requests.post()提取返回数据中的具体某个数值

    返回json数据是这样的 提取返回code rsp requests post url data jsonData headers headers timeout 3 json code rsp code if code 1000 prin
  • VRF配置

    SW 2既作为集团核心交换机 同时又使用相关技术将SW 2模拟为Internet交换机 实现集团内部业务路由表与Internet路由表隔离 那位大神能教教我这道题目要怎么做啊 转载于 https blog 51cto com 1432192
  • iOS开发之网络监听(二)SCNetworkReachability

    文章目录 判断当前网络是否可达 第一个参数 SCNetworkReachabilityRef类型的target 第二个参数 SCNetworkReachabilityFlags类型的flags SCNetworkReachability是S
  • 一个基于@DS动态数据库的Java远程数据库同步程序

    同步程序开发文档 一 开发目标 本程序为一同步程序 DAO层连接2个数据库 远程直连一个orcal数据库 读取数据后存入本地的mogdb数据库 两个数据库访问通过 DS 动态数据库切换 通过定时任务调用同步类 并保存同步日志到数据库 二 程
  • React Antd 前端生成cron表达式

    不知道你在玩游戏的时候是否发现过以下情况 1 玩某些游戏的时候 发现他的排行榜并不是时时更新的 而是每半个小时 或者一个小时更新一次 2 又比如很火的王者荣耀手游 它的日常任务 都是每天5点进行更新 那么 这些时间控制 到底是由谁控制得如此
  • 拼接json和数组

    function form2Json id var arr id serializeArray var jsonStr jsonStr for var i 0 i lt arr length i jsonStr arr i name arr
  • 如何做代码评审(code review)

    1 定义 Code Review 即日常所说的代码评审或代码回顾 主要是在软件开发的过程中 对功能源代码进行评审 其目的是找出并修正软件开发过程中出现的错误的过程 提高和改进代码质量的过程 2 目的 2 1 提前发现缺陷 code revi
  • 电阻的固有噪声(热噪声)

    电阻的固有噪声是指其自身产生的噪声 包括热噪声和过剩噪声 热噪声亦称白噪声 是由导体中电子的热震动引起的 它存在于所有电子器件和传输介质中 它是温度变化的结果 但不受频率变化的影响 热噪声是在所有频谱中以相同的形态分布 它是不能够消除的 由
  • css怎么跟html搞一起,css和html的四种结合方式

    1 在每个HTML标签上面都有一个属性 style 把css和HTML结合在一起 我是一只小小鸟 2 使用HTML的一个标签实现 css代码 div background color red color gray 3 在style标签里面
  • Java实现多线程下载文件

    这是本人在实际开发当中遇到的多线程下载文件并记录下来 public class DownloadUtil private String pathFile private String strFile private DownloadThre
  • 关于java中的泛型 T 和 ?的区别(转载+改动)

    T表示泛型 new的时候要加入泛型 更方便通用 表示不确定的类型 一般用在通配 Object表示java中所有类的父类 在集合中使用时要格外注意 jdk为了便于理解 用K表示键 V表示值 T表示type类型 E表示enum枚举 其实这四个都
  • 飞链云元宇宙、区块链、3D数字艺术品、AI绘画共创数字新生态

    2022 飞链云生态 飞链云元宇宙 区块链 3D数字艺术品 AI绘画共创数字新生态 本文地址 https feilianyun yuque com books share c2d90a1b 6bba 4d23 9fb8 65a011cf3a

随机推荐

  • SpringBoot解析json文件

    SpringBoot解析json文件 第一步 要有一个自定义的json文件 例如 文件名 user json username 张三 userage 20 username 莉莉 userage 18 第二步 要有一个实体类 例如 Data
  • linux vscode 基于 configurationProvider 设置提供的信息检测到 #include 错误

    代码正常 vscode经常性会出现include报错 大多数并不是includepath设置错误的原因 困扰了我好几天 结合大家的提示终于解决了问题 现在把方法分享给大家 希望对大家有帮助 解决办法 1 在命令行执行 gcc v E x c
  • Django 创建第一个web项目

    版本说明 python 3 7 0 django 3 0 6 Django 管理工具 django admin 部署虚拟环境 安装virtualenv pip install virtualenv i https mirrors aliyu
  • 开源技术选型手册 (china-pub 首发) -目 录

    第1章c闲话开源社区篇cc 第2章cWeb框架篇cc 2 1cStrutsc 2 2cSpringc 2 3cSeamcc 第3章c开源Web服务器c 3 1cApachecc 3 2cLighttpdcc 3 3cNginxc 第4章c应
  • 【MySQL】varchar转int类型的方法

    MySQL varchar转int类型的方法 CAST函数的使用 1 问题描述 获取一个表user中age的最大值 由于历史原因 age是varchar类型的 2 问题解决 方案一 select max cast sex as UNSIGN
  • Blender辅助工具集:M3插件

    1 MACHIN3tools M3 插件 一个辅助工具集 MACHIN3tools An Addon to Streamline Blender 3 3 and beyond by machin3 io https github com m
  • Spring(DI)

    DI Dependency Injection 即依赖注入 对象之间的依赖由容器在运行期决定 即容器动态的将某个依赖注入到对象自重 基于XML配置注入依赖 有参构造函数注入依赖 bean类实现有参构造函数 public class Stud
  • 开始在CSDN上安家了哈!

    2014年计划完成50 原创blog 这是我的目标
  • vue项目打包部署到tomcat(详细)

    hash路由模式打包部署到tomcat 1 修改config index js文件下的assetsPublicPath为 2 修改router文件夹下index js添加 base 文件夹名称 例如 yuncheng 可以自己随意设置 3
  • 未找到 van-toast 节点,请确认 selector 及 context 是否正确

    1 json文件引入 van toast vant weapp toast index 2 js文件引入 import Toast from vant weapp toast toast 3 wxml写入
  • 微信小程序蓝牙BLE开发实战——遇到问题及踩坑(三)

    微信小程序蓝牙BLE开发实战 三 对于我这种小白 遇到问题是常见的哈 这里记录下 避免日后再踩坑 文章目录 微信小程序蓝牙BLE开发实战 三 1 iPhone6及6plus无法搜索到设备 解决方案 2 IOS无法获取 mac 地址 如何连接
  • 分布式任务调度平台xxl-job

    一 java的集中式任务调度 while true Thread sleep 轮询 线程休眠的方式实现定时任务 java util Timer java util TimerTask Timer是一种定时器工具 用于使用后台线程计划执行指定
  • 数字IC设计流程学习笔记

    一 规格定制 IC的规格定制包括物理指标 性能指标和功能指标 物理指标 封装 工艺 芯片面积 性能指标 功耗 速度 功能指标 接口 芯片功能 二 系统设计 系统设计是确定IC的算法模型和系统架构等 并通过一些高级语言 matlab等对算法模
  • 【tensorflow基础】读取mnist数据

    转载于 MNIST手写数字数据集读取方法 TensorFlow的封装让使用MNIST数据集变得更加方便 MNIST数据集是NIST数据集的一个子集 它包含了60000张图片作为训练数据 10000张图片作为测试数据 在MNIST数据集中的每
  • spring-security

    文章目录 csrf remember me 密码存储 权限继承 应 要求添加的代码 白名单相关说明 csrf A网站登录 B网站 使用 Copyright C
  • 传染病模型(4)——SIRS模型和SIER模型及matlab具体程序

    前言 常见的传染病模型按照具体的传染病的特点可分为 SI SIS SIR SIRS SEIR 模型 其中 S E I R 的现实含义如下 S Susceptible 易感者 指缺乏免疫能力健康人 与感染者接触后容易受到感染 E Expose
  • 一文了解亚马逊云科技适用于 Amazon Lightsail 的托管数据库

    Amazon Lightsail 是亚马逊云科技提供的一种易上手使用 月度价格经济实惠 并包括了计算实例 容器 存储 数据库的虚拟专用服务器 在创建时可以进行业务蓝图选择 可选择包含多种操作系统 Linux Windows 等 或操作系统加
  • C++中定义常量的几种方式

    概述 在程序运行过程中 始终不发生改变的量 称之为常量 在 C 语言中常量是个固定值 也就是说常量值在定义后不能进行修改 define 宏常量 define 是 C 语言中定义常量的方式 在 C 中也可以使用 define 的使用 defi
  • RocketMQ安装与启动

    分享知识 传递快乐 官网 https rocketmq apache org 1 准备环境 系统 Centos7 jdk 1 8 2 环境部署 解压 rocketmq 并进入 rocketmq 下的 bin 目录 调整启动内存 vim bi
  • C++ 函数模板

    函数模板是通用的函数描述 它们使用泛型来定义函数 其中的泛型可用具体的类型替换 通过将类型作为参数传递给模板 可使编译器生成该类型的函数 由于模板允许以泛型 而不是具体类型 的方式编写程序 因此有时候也被称为通用编程 在标准C 98添加关键