函数模板遇上函数重载
当函数模板的名称和普通函数的名称一样时,会发生函数重载。
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
函数模板遇上函数重载相关推荐
- 6、 函数模板和类模板
函数模板和类模板 前言 C++提供了函数模板(functiontemplate).所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表.这个通用函数就称为函数 ...
- C++知识点55——函数模板
一.为啥需要模板 防止相同功能的重复实现 二.函数模板 1.模板函数的定义 template <typename T> const T& Max(const T &a, c ...
- c++ swap函数头文件_C++函数模板(泛型编程)
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码. 模板是创建泛型类或函数的蓝图或公式.库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念. 每个容器都有一个单 ...
- c++模板---1(模板概念,利用模板实现数组排序,函数模板调用规则)
什么叫泛型编程?1. 参数类型化. 2. 模板 模板概念 c++提供了函数模板,所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来代表.这个通用函数就成为函数模 ...
- C++之函数模板探究
函数模板概念: 有很多函数仅仅是参数类型不同,但是实现过程很类似.在C++里,我们可以写一个通用函数,使用非实例化的函数类型,该参数在函数被调用时进行实例化,这种函数被称为函数模板. 例1:未使用 ...
- 25.C++- 泛型编程之函数模板(详解)
本章学习: 1)初探函数模板 2)深入理解函数模板 3)多参函数模板 4)重载函数模板 当我们想写个Swap()交换函数时,通常这样写: void Swap(int& a, int& ...
- c++ 函数模板_C++函数模板(泛型编程)
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码. 模板是创建泛型类或函数的蓝图或公式.库容器,比如迭代器和算法,都是泛型编程的例子,它们都使用了模板的概念. 每个容器都有一个单 ...
- C++基础——函数模板
函数模板 类型推导 重载函数模板 函数模板 函数模板代表了一个函数家族. 返回两个值(未定义类型)中较大的那个值: template<typename T> inline const T& ...
- C++ 函数模板(template)详解
目录 1.前言 2.为什么要使用函数模板 3.函数模板语法 3.1函数模板定义形式 4.函数模板和函数重载 4.1函数模板无法隐式数据类型转换 4.2当函数模板和普通函数都符合调用时,优先选择普通函数 ...
最新文章
- STL map 简介
- 4月书讯 | 从引爆技术圈的 K8s 到图灵奖得主作品升级,从独角兽项目到人人都要学习的写作逻辑...
- 元宇宙大热后将陷低潮, 虚实互联网更准确, 2030前后才可能全面热启
- Progressive Web App是一个利用现代浏览器的能力来达到类似APP的用户体验的技术——不就是chrome OS吗?...
- redis为什么使用单线程 ,还那么快,单线程是怎么实现的
- Java Switch Statement
- [zz]NoSQL对比:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase vs Membase vs Neo4j
- C# Task异步编程
- Jmeter(二)目录介绍
- linux如何删除行首的空格
- linux device attr,DEVICE_ATTR的使用
- nginx 访问控制之 document_uri
- Servlet读取xml文件的配置参数
- 【技术分享】H5小游戏开发入门指南
- Tarjan算法——求强连通分量
- VS2019 配色_OPPO Enco M31颜值太顶了,斩获 A'设计大奖赛金奖,引领时尚潮流|oppo|大奖赛|无线耳机|配色|时尚|卡特...
- [蛋蛋涂鸦]难道要学达芬奇画鸡蛋喵??
- php 支付宝用户信息授权,支付宝登录获取用户信息授权
- CentOS6.x安装方法超详细教程
- 【我的Android进阶之旅】解决使用DiskLruCache报错: keys must match regex [a-z0-9_-]{1,64}
热门文章
- Spring容器创建流程(8)初始化bean
- Java成神之路——UML类关系图
- java httpresponse headres属性,Http Header里的Content-Type - 飞鸿影~ - 博客园
- python字符串出栈方法_Python 实现字符串反转的9种方法
- 应用人工智能识别增加教育医疗产品的趣味和实用性
- Golang实践录:开篇
- contes 7.6安装后网络问题解决方案
- eclipse中复制导入的项目并且修改了项目名字,项目后面的括号显示原来项目的名字
- 高光谱数据集_文献选读|从地面和空间高光谱数据中提取红边位置参数,以估算水稻冠层叶氮含量...
- python barrier_Python多线程-Barrier(障碍对象)