函数模板遇上函数重载

举报
C语言与CPP编程 发表于 2021/08/27 22:32:55 2021/08/27
【摘要】 函数模板和普通函数区别 函数模板不允许自动类型转化 普通函数能够进行自动类型转换 函数模板和普通函数在一起,调用规则: 函数模板可以像普通函数一样被重载 C++编译器优先考虑普通函数 如果函数模板可以产生一个更好的匹配,那么选择模板 可以通过空模板实参列表的语法限定编译器只通过模板匹配 #include &...

函数模板和普通函数区别

  • 函数模板不允许自动类型转化

  • 普通函数能够进行自动类型转换

函数模板和普通函数在一起,调用规则:

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

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

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

  4. 可以通过空模板实参列表的语法限定编译器只通过模板匹配


  
  1. #include <iostream>
  2. using namespace std;
  3. template <typename T>
  4. void myswap(T &a, T &b)
  5. {
  6.  T t;
  7.  t = a;
  8.  a = b;
  9.  b = t;
  10.  cout<<"myswap 模板函数do"<<endl;
  11. }
  12. void myswap(char &a, int &b)
  13. {
  14.  int t;
  15.  t = a;
  16.  a = b;
  17.  b = t;
  18.  cout<<"myswap 普通函数do"<<endl;
  19. }
  20. void main()
  21. {
  22.  char cData = 'a';
  23.  int  iData = 2;
  24.  //myswap<int>(cData, iData);  //结论 函数模板不提供隐式的数据类型转换  必须是严格的匹配
  25.  myswap(cData, iData); 
  26.  //myswap(iData, cData);
  27.  
  28.  cout<<"hello..."<<endl;
  29.  system("pause");
  30.  return ;
  31. }

  
  1. #include "iostream"
  2. using namespace std;
  3. int Max(int a, int b)
  4. {
  5.  cout<<"int Max(int a, int b)"<<endl;
  6.  return a > b ? a : b;
  7. }
  8. template<typename T>
  9. Max(T a, T b)
  10. {
  11.  cout<<"T Max(T a, T b)"<<endl;
  12.  return a > b ? a : b;
  13. }
  14. template<typename T>
  15. Max(T a, T b, T c)
  16. {
  17.  cout<<"T Max(T a, T b, T c)"<<endl;
  18.  return Max(Max(a, b), c);
  19. }
  20. void main()
  21. {
  22.  int a = 1;
  23.  int b = 2;
  24.  cout<<Max(a, b)<<endl//当函数模板和普通函数都符合调用时,优先选择普通函数
  25.  cout<<Max<>(a, b)<<endl//若显示使用函数模板,则使用<> 类型列表
  26.  cout<<Max(3.04.0)<<endl//如果 函数模板产生更好的匹配 使用函数模板
  27.  cout<<Max(5.06.07.0)<<endl//重载
  28.  cout<<Max('a'100)<<endl;  //调用普通函数 可以隐式类型转换 
  29.  system("pause");
  30.  return ;
  31. }

文章来源: blog.csdn.net,作者:C语言与CPP编程,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_41055260/article/details/119955167

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。