博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模板进阶——模板实参推断
阅读量:6252 次
发布时间:2019-06-22

本文共 1179 字,大约阅读时间需要 3 分钟。

一、关键点

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

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

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

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

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

 

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

template 
void func1(T, T);template
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 
T1 sum(T2, T3); //T1的类型无法判断auto ans = sum
(2, 3.14); //T1显式指定为long

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

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

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

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

 

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

你可能感兴趣的文章
图论 - Travel
查看>>
服务器设计笔记(3)-----消息队列
查看>>
吐槽一下wp toolkit ToggleSwitch控件
查看>>
Ubuntu16.04上Docker的安装及基本用法
查看>>
步步为营 C# 技术漫谈 四、垃圾回收机制(GC)
查看>>
WPF基础之体系结构
查看>>
Linux源码-等待队列注释
查看>>
[转] .htaccess实现www 与没有www之间的重定向
查看>>
c实现统计字符中单词的个数,单词之间用空格分隔开。
查看>>
JavaScript(三) - 精简
查看>>
BZOJ2064:分裂——题解
查看>>
poj 1797 Heavy Transportation(最短路径Dijkdtra)
查看>>
[转] 拉格朗日对偶
查看>>
WPF 在事件中绑定命令
查看>>
《工作DNA》读后感
查看>>
基于WinDbg的内存泄漏分析
查看>>
《小故事》
查看>>
气象预警采集及推送
查看>>
【SSH网上商城项目实战29】使用JsChart技术在后台显示商品销售报表
查看>>
python 基础复习 09 之基础函数
查看>>