当函数模板的名称和普通函数的名称一样时,会发生函数重载。

 1 #include <iostream>
 2 using namespace std;
 3
 4 //函数模板
 5 template <typename T>
 6 void myfun(T& x,T& y)
 7 {
 8     cout<<"我是函数模板"<<endl;
 9 }
10
11 //普通函数
12 void myfun(int a,char c)
13 {
14     cout<<"我是普通函数"<<endl;
15 }
16
17 int main()
18 {
19     int x=10;
20     char y='Y';
21
22     myfun(x,y);//两个输入参数类型不一样,且与普通函数的输入类型一致,调用的是普通函数
23     myfun(y,x);//两个输入参数类型不一样,但与普通函数的输入类型不一致,调用的是普通函数,因为普通函数之间会有一个隐式的类型转换
24     myfun(x,x);//两个输入参数类型一样,调用的是函数模板,函数模板的本质是类型参数化,将严格按照类型匹配,不会进行自动类型转换
25
26     return 0;
27 }

关于函数模板和普通函数在一起出现时,有以下几个原则:

1.函数模板可以像普通函数一样被重载;

2.C++编译器优先考虑普通函数;

3.如果函数模板可以产生一个更好的匹配,那么选择函数模板;

4.可以通过空模板实参列表的语法限定编译器只能调用模板函数;

 1 #include <iostream>
 2 using namespace std;
 3
 4 //函数模板
 5 template <typename T>
 6 T Max(T x,T y)
 7 {
 8     cout<<"调用的是函数模板 ";
 9     return x>y?x:y;
10 }
11
12 //函数模板的重载
13 template <typename T>
14 T Max(T x,T y,T z)
15 {
16     cout<<"调用的是函数模板的重载 ";
17     return Max(Max(x,y),z);
18 }
19
20
21 //普通函数
22 int Max(int x,int y)
23 {
24     cout<<"调用的是普通函数 ";
25     return x>y?x:y;
26 }
27
28
29 int main()
30 {
31     int x=10;
32     int y=20;
33
34     cout<<Max(x,y)<<endl;//C++编译器优先调用普通函数
35     cout<<Max<>(x,y)<<endl;//显示调用函数模板,调用的只能是函数模板
36
37     cout<<Max(3.0,4.0)<<endl;//函数模板产生更好的匹配,将调用函数模板
38     cout<<Max(3.0,4.0,5.0)<<endl;//重载
39
40     cout<<Max('A',50)<<endl;//无法与函数模板相匹配,调用普通函数(函数参数的隐式转换)
41
42     return 0;
43 }

转载于:https://www.cnblogs.com/jswu-ustc/p/8508844.html

函数模板遇上函数重载相关推荐

  1. 6、 函数模板和类模板

    函数模板和类模板 前言 C++提供了函数模板(functiontemplate).所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表.这个通用函数就称为函数 ...

  2. C++知识点55——函数模板

    一.为啥需要模板 防止相同功能的重复实现 二.函数模板 1.模板函数的定义 template <typename T> const T& Max(const T &a, c ...

  3. c++ swap函数头文件_C++函数模板(泛型编程)

    模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码. 模板是创建泛型类或函数的蓝图或公式.库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念. 每个容器都有一个单 ...

  4. c++模板---1(模板概念,利用模板实现数组排序,函数模板调用规则)

    什么叫泛型编程?1. 参数类型化. 2. 模板 模板概念 c++提供了函数模板,所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表.这个通用函数就成为函数模 ...

  5. C++之函数模板探究

    函数模板概念:   有很多函数仅仅是参数类型不同,但是实现过程很类似.在C++里,我们可以写一个通用函数,使用非实例化的函数类型,该参数在函数被调用时进行实例化,这种函数被称为函数模板. 例1:未使用 ...

  6. 25.C++- 泛型编程之函数模板(详解)

    本章学习: 1)初探函数模板 2)深入理解函数模板 3)多参函数模板 4)重载函数模板 当我们想写个Swap()交换函数时,通常这样写: void Swap(int& a, int& ...

  7. c++ 函数模板_C++函数模板(泛型编程)

    模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码. 模板是创建泛型类或函数的蓝图或公式.库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念. 每个容器都有一个单 ...

  8. C++基础——函数模板

    函数模板 类型推导 重载函数模板 函数模板 函数模板代表了一个函数家族. 返回两个值(未定义类型)中较大的那个值: template<typename T> inline const T& ...

  9. C++ 函数模板(template)详解

    目录 1.前言 2.为什么要使用函数模板 3.函数模板语法 3.1函数模板定义形式 4.函数模板和函数重载 4.1函数模板无法隐式数据类型转换 4.2当函数模板和普通函数都符合调用时,优先选择普通函数 ...

最新文章

  1. STL map 简介
  2. 4月书讯 | 从引爆技术圈的 K8s 到图灵奖得主作品升级,从独角兽项目到人人都要学习的写作逻辑...
  3. 元宇宙大热后将陷低潮, 虚实互联网更准确, 2030前后才可能全面热启
  4. Progressive Web App是一个利用现代浏览器的能力来达到类似APP的用户体验的技术——不就是chrome OS吗?...
  5. redis为什么使用单线程 ,还那么快,单线程是怎么实现的
  6. Java Switch Statement
  7. [zz]NoSQL对比:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j
  8. C# Task异步编程
  9. Jmeter(二)目录介绍
  10. linux如何删除行首的空格
  11. linux device attr,DEVICE_ATTR的使用
  12. nginx 访问控制之 document_uri
  13. Servlet读取xml文件的配置参数
  14. 【技术分享】H5小游戏开发入门指南
  15. Tarjan算法——求强连通分量
  16. VS2019 配色_OPPO Enco M31颜值太顶了,斩获 A'设计大奖赛金奖,引领时尚潮流|oppo|大奖赛|无线耳机|配色|时尚|卡特...
  17. [蛋蛋涂鸦]难道要学达芬奇画鸡蛋喵??
  18. php 支付宝用户信息授权,支付宝登录获取用户信息授权
  19. CentOS6.x安装方法超详细教程
  20. 【我的Android进阶之旅】解决使用DiskLruCache报错: keys must match regex [a-z0-9_-]{1,64}

热门文章

  1. Spring容器创建流程(8)初始化bean
  2. Java成神之路——UML类关系图
  3. java httpresponse headres属性,Http Header里的Content-Type - 飞鸿影~ - 博客园
  4. python字符串出栈方法_Python 实现字符串反转的9种方法
  5. 应用人工智能识别增加教育医疗产品的趣味和实用性
  6. Golang实践录:开篇
  7. contes 7.6安装后网络问题解决方案
  8. eclipse中复制导入的项目并且修改了项目名字,项目后面的括号显示原来项目的名字
  9. 高光谱数据集_文献选读|从地面和空间高光谱数据中提取红边位置参数,以估算水稻冠层叶氮含量...
  10. python barrier_Python多线程-Barrier(障碍对象)