模板进阶——模板实参推断

一、关键点

模板实参:模板参数T的实例类型,如int、string等

模板实参推断:从函数实参来确定模板实参的过程

模板类型参数与类型转换:const的转换、数组/函数到指针的转换

显式模板实参:当模板参数类型并未出现在函数参数列表时

通过函数指针推断模板实参:函数指针的类型决定了模板实参的类型

 

二、模板类型参数可以运用的类型转换

template <typename T> void func1(T, T);
template <typename T> void func2(const T&, const T&); int main()
{	string s1 = "hello";const string s2 = "aloha";func1(s1, s2);		//s2的顶层const将被忽略,调用func1(string, string) func2(s1, s2);		//将s1转换为const是允许的,调用func2(const string&, const string&) int a[5], b[10];func1(a, b);		//调用func1(int*, int*)func2(a, b);		//错误:形参是引用,数组不会转换为指针 
}

小结:顶层const无论是在形参中还是在实参中,都会被忽略

小结:允许将一个非const对象的引用(或指针)传递给一个const对象的引用或指针

小结:如果函数参数不是引用类型,则可以对数组或函数类型的实参应用正常的指针转换

注:函数参数列表中的正常类型的类型转换不受模板影响

 

三、函数模板显式实参

1. 编译器无法推断出模板实参的情况:

template <typename T1, typename T2, typename T3>
T1 sum(T2, T3);		//T1的类型无法判断auto ans = sum<long>(2, 3.14);	//T1显式指定为long

注:显示模板实参按由左至右的顺序与对应的模板参数匹配

注:只有右边的显式模板参数可以省略(如T2、T3,它们可以从函数参数推断出来)

2. 正常类型转换可以应用于显式指定的实参

template <typename T>
bool cmp(const T&, const T&); int main()
{	long a;compare(a, 1024);		//错误compare<int>(a, 1024);	//a被转换为intcompare<long>(a, 1024);	//1024被转换为long 
}

 

转载于:https://www.cnblogs.com/xzxl/p/7856629.html

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

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

相关文章

leetcode 973. 最接近原点的 K 个点(排序)

我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。 &#xff08;这里&#xff0c;平面上两点之间的距离是欧几里德距离。&#xff09; 你可以按任何顺序返回答案。除了点坐标的顺序之外&#xff0c;答案确保是唯一的。 示例 1&#xf…

ios 打开扬声器

[[UIDevice currentDevice] setProximityMonitoringEnabled:YES]; AVAudioSession *audioSession [AVAudioSession sharedInstance]; //默认情况下扬声器播放 [audioSession setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthe…

sqlserver 批量处理数据

目前我觉得有两种方法可以用作批量数据的处理&#xff0c;也算比较靠谱的吧&#xff1a;sqlbulkcopy 和利用表值函数。 1.sqlbulkcopy是dotnet中的一个用来处理大批量插入数据的&#xff0c;具体用法如下&#xff1a; using (SqlConnection conSave new SqlConnection(Config.…

区块链编程语言_区块链开发中使用的最受欢迎的编程语言

区块链编程语言by Michael Draper通过迈克尔德雷珀(Michael Draper) We’re currently in the midst of a new burgeoning industry with blockchain development.我们目前正处于区块链开发的新兴行业中。 Blockchain technology is very much in a nascent stage, however t…

vscode 模糊部分代码_本周 GitHub 速览:您的代码有声儿吗?(Vol.38)

作者&#xff1a;HelloGitHub-小鱼干摘要&#xff1a;还记得花式夸赞程序员的彩虹屁插件 vscode-rainbow-fart 吗&#xff1f;它后续有人啦&#xff01;JazzIt 同它的前辈 vscode-rainbow-fart 一样&#xff0c;是一个能让代码“发声”的工具&#xff0c;它会在脚本运行成功或者…

有趣的链接

1行命令实现人脸识别&#xff1a;https://linux.cn/article-9003-1.html转载于:https://blog.51cto.com/10704527/1983007

webpack基础使用Loader(三)

loaders:[ { test:/\.js$/, loader:babel-loader, exclude:__dirname"/node_modules/", //排除打包的范围&#xff08;需要绝对路径&#xff09; include:__dirname"src",//指定打包的范围&#xff08;需要绝对路径&#xff09; query:{ …

Flutter VS React Native –为什么我认为Flutter最适合移动应用程序开发

This isn’t the type of article you might think it’s going to be. I’m not going to list the pros and cons of every framework and I am not going to do a comparative analysis of performance. 这不是您可能会想到的文章类型。 我不会列出每个框架的优缺点&#xf…

python 2.7 error: Microsoft Visual C++ 9.0 is required

参考&#xff1a;https://stackoverflow.com/questions/43645519/microsoft-visual-c-9-0-is-required 解决方法&#xff1a; 下载并安装Microsoft Visual C Compiler for Python 2.7&#xff1a; Microsoft Visual C Compiler for Python 2.7 转载于:https://www.cnblogs.com/…

python内置支持集合运算吗_Python中的集合支持交、并运算

Python中的集合支持交、并运算答&#xff1a;√新冠肺炎患者潜伏期的传染性最强答&#xff1a;对在运动的组接中&#xff0c;镜头组接一个基本的原则是()、()。答&#xff1a;动接动 静接静在中指背,距指甲根中点1分许称答&#xff1a;老龙库存控制属于生产管理而不是物流管理的…

C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)

今天写的是二叉树操作的实验&#xff0c;这个实验有三个部分&#xff1a; ①建立二叉树&#xff0c;采用二叉链表结构 ②先序、中序、后续遍历二叉树&#xff0c;输出节点值 ③销毁二叉树 二叉树的节点结构定义 typedef struct BiTNode //二叉树的节…

OC extern和变量

注意&#xff1a; extern只能用来声明全部变量&#xff0c;不能拿来定义变量 #include <stdio.h>// 第一种做法是将a定义在main函数的前面 // int a;// 完整地声明全部变量a // extern int a;// extern是可以省略的 int a;int a;int a;int a;void test();int main(int ar…

leetcode514. 自由之路(dp)

电子游戏“辐射4”中&#xff0c;任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘&#xff0c;并使用表盘拼写特定关键词才能开门。 给定一个字符串 ring&#xff0c;表示刻在外环上的编码&#xff1b;给定另一个字符串 key&#xff0c;表示需要拼写的关键…

java实现递归算法_如何在Java中实现二进制搜索算法而无需递归

java实现递归算法by javinpaul由javinpaul 流行的二进制搜索算法的迭代实现&#xff0c;用于在排序数组中查找元素。 (An Iterative implementation of the popular binary search algorithm to find an element in a sorted array.) Hello everyone! I have published a lot …

Django 入门项目案例开发(中)

关注微信公众号&#xff1a;FocusBI 查看更多文章&#xff1b;加QQ群&#xff1a;808774277 获取学习资料和一起探讨问题。 昨天已经描述了如何搭建Django的开发环境&#xff0c;今天描述业务流程&#xff0c;具体我们要实现一个什么样的业务&#xff1b; 以下的业务都是假设的…

纵横公路造价软件学习_通辽分公司组织开展2020年 养护工程造价预算培训

为进一步提高养护员工业务水平和业务素质&#xff0c;提升熟练掌握信息化公路工程造价预算&#xff0c;11月5日&#xff0d;11月8日期间,通辽分公司组织开展了2020年养护工程造价预算培训。养护科全体人员、基层所站统计人员共计16人参加培训。本次培训邀请了纵横公路工程造价管…

java 生成二维码

一步一步用 java 设计生成二维码 转至 http://blog.sina.com.cn/s/blog_5a6efa330102v1lb.html 在物联网的时代&#xff0c;二维码是个很重要的东西了&#xff0c;现在无论什么东西都要搞个二维码标志&#xff0c;唯恐落伍&#xff0c;就差人没有用二维码识别了。也许有一天生分…

leetcode 922. 按奇偶排序数组 II(双指针)

给定一个非负整数数组 A&#xff0c; A 中一半整数是奇数&#xff0c;一半整数是偶数。 对数组进行排序&#xff0c;以便当 A[i] 为奇数时&#xff0c;i 也是奇数&#xff1b;当 A[i] 为偶数时&#xff0c; i 也是偶数。 你可以返回任何满足上述条件的数组作为答案。 示例&a…

机器学习 深度学习 ai_如何突破AI炒作成为机器学习工程师

机器学习 深度学习 aiI’m sure you’ve heard of the incredible artificial intelligence applications out there — from programs that can beat the world’s best Go players to self-driving cars.我敢肯定&#xff0c;您已经听说过令人难以置信的人工智能应用程序-从可…

arcgis插值不覆盖区划图_ArcGIS绘图—空气质量站点数据插值绘制等值线图

作者&#xff1a;吴琳&#xff1b;陈天舒&#xff0c;山东大学环境科学&#xff08;大气化学&#xff09;博士在读数据&#xff08;Excel格式&#xff09;&#xff1a;多站点污染物数据&#xff08;国&#xff0c;省&#xff0c;市控点&#xff09;&#xff0c;站点经纬度信息绘…