【函数模板】参数类型

news2024/9/21 2:46:46

一、默认参数

1.默认参数的调用

函数模板的参数类型可以指定一个默认值,在不传入参数类型的时候将使用默认参数类型来实例化函数模板。
例如:

template<typename T, typename R = int>
auto add(T a, R b = 0) -> decltype(a + b) {
	std::cout << "调用默认参数函数模板\n";
	return a + b;
}

如果不指定 R R R的类型,那么 R R R默认作为 i n t int int类型传入,默认值为 0 0 0
也可以传入其他类型,那么将不再使用默认类型和值

void Test1() {
	//使用默认参数
	int res = add(1);
	std::cout << res << "\n";

	//不使用默认参数
	int a = 1;
	double b = 1.0;
	double ans = add(a, b);
	std::cout << ans << "\n";
}

得到以下结果:
在这里插入图片描述

二、非类型模板参数

1.非类型模板参数的调用

对于非类型模板参数,实际上就是传入一个常量,用于辅助模板函数的实现,增加函数模板的灵活性。
具体调用如下:

//非类型模板参数
template<typename T, int V = 100>
T add_100(T x) {
	std::cout << "调用非类型模板参数函数模板\n";
	return x + V;
}

void Test2() {
	int res = add_100(10);
	std::cout << res << "\n";
}

这里的 V V V被指定为 i n t int int类型的常量 100 100 100,调用模板时无需也无法传入类型来改变。

2.非类型模板参数的类型

具体而言,有以下这些常量可以作为非了下模板参数的类型
在这里插入图片描述
在这里插入图片描述这里演示一下 a u t o auto auto的使用:

//使用auto作为非类型模板参数
template<typename T, auto val = 100>
auto add_auto(T x) -> decltype(x + val) {
	std::cout << "调用了auto作为非类型模板参数的函数模板\n";
	return x + val;
}

随着 C + + C++ C++标准的扩展, C + + 20 C++20 C++20中已经可以使用 f l o a t float float d o u b l e double double类型作为非类型模板参数了,如下:

//C++20以上支持double和float作为非类型模板参数
template<typename T, double d = 0.0>
double add_double(T x) {
	std::cout << "调用了double为非类型模板参数的函数模板\n";
	return x + d;
}

template<typename T, float f = 0.0f>
auto add_folat(T x) -> decltype(x + f) {
	std::cout << "调用了float为非类型模板参数的函数模板\n";
	return x + f;
}

3.其他

对于模板的类型,不一定要使用上所有传入的类型,如:

//不使用参数
template<typename T, typename R>
T add_nothing(T x) {
	return x;
}

而对于默认参数的类型,前面可以有 t y p e n a m e typename typename来修饰。这样的目的是在一些特殊的类型上让编译器能够更准确的识别(如迭代器等)

//使用typename修饰变量
template<typename T, typename int val = 100>
auto add_with_typename(T x) -> decltype(x + val) {
	return (x + val);
}

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

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

相关文章

HTML5CSS3--CSS3的各种用法

1.background-origin 背景图起点&#xff1a; padding-box背景图像相对于内边距框来定位。border-box背景图像相对于边框盒来定位。content-box背景图像相对于内容框来定位。 2.background-clip 背景图裁剪&#xff1a; border-box默认值。背景绘制在边框方框内&#xff0…

AcWing 282. 石子合并

必看的视频讲解↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 【E28【模板】区间DP 石子合并——信息学竞赛算法】 合并过程总开销等于红色数字总和&#xff0c;可以理解为花费的总体力&#xff01; f数组的含义是f【i】【j】是从第i堆石子开始到第…

HighPoint发布NVMe RAID外壳以应对严苛环境

2024年8月23日&#xff0c;HighPoint揭开了其新款RocketStor 654x系列外部NVMe RAID外壳的神秘面纱。这款新产品旨在将第四代存储应用提升至全新水平&#xff0c;为工业、边缘计算平台以及专业工作站环境提供强大的存储解决方案。 #### 技术亮点 - **高性能与大容量** Rocke…

【服务器篇】买服务器想安装宝塔面板,看这一篇够了

服务器选择&#xff1a;CentOS Stream-9 服务器厂商&#xff1a;腾讯云&#xff08;没有收钱&#x1f4b4;&#xff09; 使用工具&#xff1a;宝塔&#xff08;没收钱&#xff09; 建议两位大佬给俺冲冲钱&#xff0c;嘻嘻&#x1f92d; 系列文章目录 提示&#xff1a;这里可以…

VMware Workstation安装及配置CentOS7 Linux操作系统

VMware workstation安装 百度网盘&#xff0c;VMware-workstation-full-17.5.2.exe 安装包&#xff1a; 链接:https://pan.baidu.com/s/1xgbWUlo-hFUbb11MRxIVsw?pwd87bq 提取码: 87bq 检查网络适配器是否正常配置 在VMware Workstation中安装CentOS7 Linux操作系统 下载…

财务上的弹性

财务管理和时间管理&#xff0c;是有一定关联的。 一般来说&#xff0c;财务上的弹性&#xff0c;会带来时间管理的弹性。财务上的紧张&#xff0c;会带来时间管理的紧张。 比如&#xff0c;一个人财务状况很好&#xff0c;就可以用更多的时间挑选合适的工作。在工作期间&…

【LangChain】使用LangChain的提示词模板:技巧与总结

&#x1f601; 作者简介&#xff1a;前端开发爱好者&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;JavaScript小贴士 &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续…

【困难】 猿人学web第一届 第15题 备周则意怠,常见则不疑

数据接口分析 数据接口 https://match.yuanrenxue.cn/api/match/15 请求时需要携带 page 页码&#xff0c;m为加密参数 cookie中没有加密信息&#xff0c;携带 SessionId请求即可 加密参数还原 查看数据接口对应的 requests 栈 m参数 是通过 window.m() 方法执行后得到的 打上…

【免费分享】2024最新优化算法-黑翅鸢算法BKA

黑翅鸢优化算法&#xff08;Black-winged kite algorithm&#xff0c;BKA&#xff09;是一种受自然界启发的群体智能优化算法&#xff0c;其设计灵感源自黑翅鸢&#xff08;Black-winged kite&#xff09;的生存策略。黑翅鸢在攻击和迁徙过程中展现出的高度适应性和智能行为&am…

3分钟带你手把手安装一款音乐制作神器——FL Studio 24.1.1.4285中文版

大家好&#xff0c;今天我要给大家介绍一款音乐制作神器——FL Studio 24.1.1.4285中文版。这款软件可是音乐制作界的翘楚&#xff0c;无论是专业人士还是音乐爱好者&#xff0c;都会为它的强大功能和易用性所折服。 我们来看看FL Studio的特点。这是一款全能型的音乐工作站&am…

ACL实验配置学习笔记

拓扑描述&#xff1a; R1作为所有PC的网关&#xff1b; 财务部用户&#xff1a;192.168.1.0/24 市场部用户&#xff1a;192.168.2.0/24 Server1&#xff1a;HTTP服务器地址为7.7.7.7/24 PC 2&#xff1a;192.168.1.2 PC 5:&#xff1a;192.168.2.2 PC 3&#xff1a;&…

干货分享|分享一款高效的软件卸载神器 Geek Uninstaller

问题&#xff1a;卸载软件时&#xff0c;时常会留下残留文件和注册表。当遇到流氓软件&#xff0c;还常常卸载失败。 1.软件介绍 特点&#xff1a;高效快速&#xff0c;小巧便携。100% 免费 2.下载方法 官方下载网站&#xff1a;Geek Uninstaller - the best FREE uninstaller …

《深入理解JAVA虚拟机(第2版)》- 第6章 - 学习笔记

第6章 类文件结构 6.1 概述 字节码和二级制本地机器码&#xff08;Native Code&#xff09;是用来存储程序编译后的结果的&#xff0c;是二种程序存储结构。 6.2 无关性的基石 这里说的无关性&#xff0c;分为&#xff1a;平台无关性和语言无关性。 平台无关性&#xff1a;…

Codeforces Round 913 (Div. 3) D. Jumping Through Segments (二分*1400)

很容易看出这道题应该二分答案&#xff0c;本题的难点在于对于mid的验证。 找距离肯定是不难&#xff0c;难就难在我们输入的区间并不是按照左右顺序排列的&#xff0c;有的区间可能涵盖住了另一个区间&#xff0c;也就是说在这里我们需要进行的是左右的移动。 那么我们根本无…

VBA数据库解决方案第十四讲:如何在数据库中动态删除和建立数据表

《VBA数据库解决方案》教程&#xff08;版权10090845&#xff09;是我推出的第二套教程&#xff0c;目前已经是第二版修订了。这套教程定位于中级&#xff0c;是学完字典后的另一个专题讲解。数据库是数据处理的利器&#xff0c;教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法…

【楼兰图腾】

题目 思路 本质上这个问题就是在求分别在一个数左边和右边的&#xff0c;大于该数的个数的乘积&#xff08;小于同理&#xff09; 维护一个下标指元素大小的线段树来方便求大于和小于某数值的元素个数 通过从左到右遍历&#xff0c;来确定此时的线段树状态一定不包括右边 因为…

【C++ Primer Plus习题】8.3

问题: 解答: #include <iostream> #include <string> #include <cctype> using namespace std;void function(string& str) {for (int i 0; i < str.size(); i){str[i]toupper(str[i]);} }int main() {string str;while (true){cout << "…

【超详细】深度学习的Hello World:使用pytroch训练一个自定义的手写体数字识别模型完整流程【附数据集与完整源码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发…

Unet改进15:添加TripletAttention||减少冗余计算和同时存储访问

本文内容:在不同位置添加TripletAttention注意力机制 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 由于注意机制具有在通道或空间位置之间建立相互依赖关系的能力,近年来在各种计算机视觉任务中得到了广泛的研究和应用。在本文中,我们研究了轻量级但…

龙芯+FreeRTOS+LVGL实战笔记(新)——01准备开发环境

本专栏是笔者另一个专栏《龙芯RT-ThreadLVGL实战笔记》的姊妹篇&#xff0c;主要的区别在于实时操作系统的不同&#xff0c;章节的安排和任务的推进保持一致&#xff0c;并对源码做了改进和优化&#xff0c;各位可以先到本人主页下去浏览另一专栏的博客列表&#xff08;目前已撰…