//函数模板重载
#include<iostream>
using namespace std; /*
函数模板会进行严格的类型匹配,模板类型不提供隐式类型转化
普通函数能够进行自动类型转换
*/ /*
函数模板重载四大规则
1 函数模板可以像普通函数一样被重载
2 C++编译器优先考虑普通函数
3 如果函数模板可以产生一个更好的匹配,那么选择模板
4 可以通过空模板实参列表的语法限定编译器只通过模板匹配
*/ template<typename T>
void Test1(T a, T b){
cout << "执行了模板函数Test1()" << endl;
} void Test2(int a, int b){
cout << "执行了Test2()" << endl;
} void Test1(int a, int b){
cout << "执行了普通函数Test1()" << endl;
} void Test3(int a, int b){
cout << "执行了普通函数Test3()" << endl;
} void ProtectA(){
int a = ;
int b = ;
char c = '';
//Test1(a, c); 报错 error C2782: “void Test1(T,T)”: 模板 参数“T”不明确
/*
因为 a是int型,c是char型 而函数模板要求两个参数都是T型 就是说两个参数的类型必须一致,
但是 int和char类型不一致 所以报错
*/
Test2(a, c);//对于普通函数而言,则可以进行隐式类型转换,所以没有问题
} void ProtectB(){
int a=,b=;
char c = '',d='';
Test1(a, b);//这里调用普通函数
Test1<>(a, b);//这里调用模板函数--规则4
Test1(c, d);//这里调用模板函数--规则3---假设没有模板函数 仍然会调用普通函数
Test3(c, d);
} void main(){
ProtectB();
system("pause");
}

最新文章

  1. 2-1 Linux 操作系统及常用命令
  2. DataRow映射实体
  3. 【Android UI】Android Layout XML属性
  4. aircack-ng抓握手包
  5. iOS关于UILabel 基本属性 背景图片 背景色
  6. M2: XAML Controls(2)
  7. AFNetwork 作用和用法详解
  8. go-mysql
  9. Django的列表反序
  10. 调用WCF Data Service的几点Tips
  11. mac mysql下载
  12. javaEE与JSP基础
  13. 前端html 中jQuery实现对文本的搜索并把搜索相关内容显示出来
  14. LruCache的缓存策略
  15. 史上最全面的Spring Boot Cache使用与整合
  16. FP-Growth算法
  17. Kubernetes Service Account如何生成Token
  18. fllume 入门
  19. C# 动态事件示例
  20. 解决在IDEA 的Maven下 出现 Cannot access in offline mode 问题

热门文章

  1. QSignalMapper类的使用
  2. Deferred content load was not performed. To provide the content, subscribe to the View&#39;s QueryControl event
  3. 新闻焦点切换flash应用
  4. java线程总结(4/5)
  5. java中的序列化和反序列化学习笔记
  6. WIN7如何替换开机登录画面
  7. npm显示已安装的包
  8. 学习EF之CodeFirst二(数据库对应映射)
  9. ES6 let用法
  10. Vue 组件通信(子组件向父组件传递数据)