1. 如图所示代码,模板函数 compare(const T&, const T&) 要求两个参数类型要一样。

  compare("bye","dad") 调用,将模板参数推断为 const char[4] (因为还有一个 NULL 字符串结尾),而且两个参数都为 const char[4],所以可以正常实例化模板函数。

  而 compare("hi","world") 调用,将两个模板参数本别推断为 const char [3] 和 const char [6],两个参数类型不同,所以无法实例化该模板参数。

  

2.  如图所示:

  calc(ch,'c')实例化了 char calc(char,int)函数,因为 'c' 的类型为 char ,可以转换为 int。

  同样,因为 float 类型可以转换为 int 类型,所以 calc(d,f) 调用可以正常实例化 double calc(double,int) 函数。

  又因为 ch 和 'c' 都是 char 类型,所以 fcn(ch,'c') 可以实例化 char fcn(char,char) 函数。

  而 d 和 f 分别是 double 和 float 类型,所以无法实例化要求两个参数类型相同的 fcn(T,T) 函数。

3. 指定显示模板参数

4. 当一个函数参数是模板类型参数的一个普通(左值)引用时(即,形如 T&),绑定规则告诉我们,只能传递给它一个左值(如,一个变量或一个返回引用类型的表达式)。实参可以使const 类型,也可以不是。如果实参是const 的,则 T 将被推断为 const 类型:

5. 如果一个模板函数参数的类型是 const T &,正常的绑定规则告诉我们可以传递给它任何类型的实参-----一个对象(const 或非 const)、一个临时对象或是一个字面常量值。当函数参数本身是 const 时,T 的类型推断的结果不会是一个 const 类型。const 已经是函数参数类型的一部分;因此,它不会也是模板参数类型的一部分:

6. 接受右值引用参数的模板函数

void g(T&& val):

void g(T val):

void g(const T& val):

最新文章

  1. TYVJ博弈论
  2. 将Excel数据导入mysql数据库的几种方法
  3. 无声的吐槽csdn
  4. jdbc-大数据存储
  5. SVN高级
  6. js对象系列【一】深层理解对象与原型
  7. Canvas 获得键盘焦点的方法
  8. Docker数据卷持久化
  9. oracle入坑日记<二>认识oracle(含sqlplus基础使用)
  10. #Leetcode# 1016. Binary String With Substrings Representing 1 To N
  11. [转帖]Runtime, Engine, VM 的区别是什么?
  12. Linux的php-fpm优化心得-php-fpm进程占用内存大和不释放内存问题(转)
  13. case关联表查询
  14. python-flask-wtforms组件流程源码
  15. mybatis学习 十五 resultMap标签 一对多
  16. 开发人员如何正确对待BUG?
  17. MATLAB 的向量,矩阵和阵列命令
  18. Angular6 学习笔记——组件详解之组件通讯
  19. Ubuntu下安装JDK1.7
  20. mathtype免费版下载及序列号获取地址

热门文章

  1. spark持久化
  2. Zynq-7000 FreeRTOS(二)中断:Timer中断
  3. ator自动生成mybatis配置和类信息
  4. Linux下的Shell特殊符号大全(转)
  5. 全网最详细的Git学习系列之安装各个Git图形客户端(Windows、Linux、Mac系统皆适用ing)(图文详解)
  6. spring中redistemplate不能用通配符keys查出相应Key的问题
  7. python-五个面试题
  8. Flex 生成行号
  9. json跨域问题
  10. http协议 put、delete请求asp.net mvc应用,报404错误