/***Copyright (c) 2018 Young Fan.All Right Reserved.*Filename: 2 函数模板和普通函数区别*Author: Young Fan*Date: 2018.4.19*IDE: Visual Studio 2017*Description: 函数模板和普通函数区别*/#include<iostream>
using namespace std;template<class T>
int MyAdd(T a,T b)
{return a + b;
}//普通函数可以进行自动类型转换
//函数模板必须严格类型匹配
int MyAdd(int a, char c)
{ return a + c;
}int MyAdd(int a, int b)
{return a + b;
}void test2()
{int a = 10;int b = 20;char c1 = 'a';char c2 = 'b';//可以用加断点再debug的方式,来验证到底匹配谁MyAdd(a, c1);//匹配普通函数MyAdd(a, b);//匹配模板,此时模板的T,相当于int,//如果函数模板可以产生一个更好的匹配,那么选择模板MyAdd(c1, b);//匹配普通函数,普通函数可以进行自动类型转换//不会匹配模板,因为模板T要严格匹配,只能同时为一个类型MyAdd(a, b);//匹配普通函数,c++编译器优先考虑普通函数MyAdd<>(a, b);//此时会匹配模板,不匹配普通函数
}//函数模板可以想普通函数那样被重载
template<class T>
void Print(T a)
{}template<class T>
void Print(T a, T b)
{}int main()
{test2();return 0;
}

总结:

  函数模板和普通函数的区别? 函数模板不允许自动类型转化 普通函数能够自动进行类型转化函数模板和普通函数在一起调用规则: 函数模板可以想普通函数那样可以被重载 c++编译器优先考虑普通函数 如果函数模板可以产生一个更好的匹配,那么选择模板 可以通过空模板实参列表的语法限定编译器只能通过模板匹配

函数模板和普通函数区别相关推荐

  1. C++函数模板和普通函数的调用规则

    C++函数模板和普通函数的调用规则: 普通函数可以进行自动类型转换. 函数模板必须严格类型匹配. C++编译器优先考虑普通函数. 如果函数模板可以产生一个更好的匹配,那么选择模板. 可以通过空模板实参 ...

  2. C++中函数模板template和函数参数为指针,且有返回值的结合使用

    1 #include<iostream> 2 using namespace std; 3 // 利用模板函数计算一个表达式 4 template<class Type> 5 ...

  3. 普通函数与函数模板的区别

    普通函数与函数模板区别: 普通函数调用时可以发生自动类型转换(隐式类型转换) 函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换 如果利用显示指定类型的方式,可以发生隐式类型转换 #inclu ...

  4. C++ 普通函数与函数模板 区别以及调用规则01

    //普通函数 和 函数模板 区别 int myPlus(int a, int b) {return a + b; }template<class T> T myPlus2(T a, T b ...

  5. 模板 (函数模板语法 ,类模板与函数模板的区别,:函数模板案例,普通函数与函数模板的区别,普通函数与函数模板调用规则,模板的局限性,类模板分文件编写.cpp,Person.hpp,类模板与友元)

    **01:函数模板语法: #include<iostream> using namespace std;//交换两个整型函数 void swapInt(int &a ,int &a ...

  6. C++ 函数模板和排序的函数模板——学习笔记

    我们在使用重载函数时,只是使用了函数名,而函数体还是得分别定义,在C++中函数模板为我们很好的解决了这个问题. 1.函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函 ...

  7. [转]C++函数模板与模板函数

    1.函数模板的声明和模板函数的生成 1.1函数模板的声明 函数模板可以用来创建一个通用的函数,以支持多种不同的形参,避免重载函数的函数体重复设计.它的最大特点是把函数使用的数据类型作为参数. 函数模板 ...

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

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

  9. c++ 函数模板_C/C++编程笔记:C++入门知识,深入解析C++函数和函数模板

    本篇要学习的内容和知识结构概览 函数的参数及其传递方式 1. 函数参数传递方式 传值: 传变量值: 将实参内存中的内容拷贝一份给形参, 两者是不同的两块内存 传地址值: 将实参所对应的内存空间的地址值 ...

最新文章

  1. Azure手把手系列5:Azure帐户和订阅
  2. android的提示页面,android 页面加载中,友情提示界面-Fun言
  3. Asterisk 可加载模块
  4. python3数字类型分为_Python初学3——数字类型及操作
  5. python4发布_Python 3.4.1 发布
  6. android alarmmanager定时任务,AlarmManager 实现定时任务
  7. 数据分析|如何利用BI工具,探索各商品的潜在关联价值
  8. volatility内存取证
  9. SOA架构中企业数据总线(ESB)和微服务架构中注册服务管理(dubbo)的区别
  10. JTT808、JTT1078、TJSATL主动安全踩坑记录
  11. 笔记本打开计算机,笔记本打开黑屏怎么办_笔记本电脑开机黑屏的解决步骤-win7之家...
  12. android 自动化测试 百度,Android 自动化测试框架-百度cafe
  13. Mac系统中键盘失灵后的解决小技巧
  14. jpg转换成pdf转换器免费版哪个好
  15. 年底了;来一套 微信公众号二维码签到和在线网站抽奖
  16. 2018 年度读书总结
  17. Synchronized锁的使用
  18. IBM宣布启动2014三大战略方…
  19. OMNI USDT 0.12.0 环境部署
  20. 痞子衡嵌入式:简析i.MXRT1170 XECC功能特点及其保护串行NOR Flash和SDRAM之道

热门文章

  1. python中import上级文件夹
  2. 软件开发职业是青春饭
  3. python文件输出exe文件反汇编_python 反编译exe文件为py文件的实例代码
  4. AJAX应用的演示和源码
  5. 《流浪地球》硬核科技:为什么电影情节根本不可能实现?
  6. 如何在最近任务列表中隐藏app
  7. 解决IE浏览器下载文件,文件名乱码问题(浏览器历史介绍)
  8. Windows 11 笔记本电脑打开盖子无法立刻唤醒
  9. 【博学谷学习记录】超强总结,用心分享 | 产品经理之AAARR模型和RFM模型
  10. c语言 输出定向到文件 命令提示符窗口也能看见,关于cmd:显示Windows命令提示符输出并将其重定向到文件...