鱼C论坛

 找回密码
 立即注册
查看: 1550|回复: 0

[技术交流] C++旅程第10站——函数模板2

[复制链接]
发表于 2020-5-26 22:02:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
I call architecture frozen music.
                                                                                      普通函数与函数模板
普通函数与函数模板的区别:
1、普通函数->可以发生隐式类型转换;
2、函数模板->用自动类型推导,不可以发生隐式类型转换
3、函数模板->用显示指定类型,可以发生隐式类型转换
  1. #include<iostream>

  2. using namespace std;

  3. int add1(int a, int b)
  4. {
  5.         return a + b;
  6. }

  7. template<class T>
  8. T add2(T a,T b)
  9. {
  10.         return a+b;
  11. }

  12. void test1()
  13. {
  14.         int a = 11;
  15.         int b = 22;
  16.         int c = 'c';
  17.        
  18.         cout << add1(a,b) << endl;
  19.         cout << add1(a,c) << endl;
  20.        
  21.         //自动类型转换---不会发生隐式类型转换的
  22.         cout << add2(a,c) << endl;
  23.        
  24.         //显示指定类型----会发生隐式类型转换
  25.         cout << add2<int>(a,c) << endl;
  26. }


  27. int main()
  28. {
  29.         test1();
  30.        
  31.         return 0;
  32. }
复制代码

调用规则:
1、如果函数模板和普通函数都可以实现,优先调用普通函数
2、可以通过空模板参数列表来强制调用函数模板
3、函数模板也可以发生重载
4、如果函数模板可以产生更好的匹配,优先调用函数模板
  1. #include<iostream>

  2. using namespace std;

  3. void add1(int a, int b)
  4. {
  5.         cout << "普通函数调用!!!!!!!!!" << endl;
  6. }

  7. template<class T>
  8. T add1(T a,T b)
  9. {
  10.         cout << "函数模板调用!!!!!!!!!" << endl;
  11. }

  12. template<class T>
  13. T add1(T a,T b,T c)
  14. {
  15.         cout << "重载的函数模板调用!!!!!!!!!" << endl;
  16. }

  17. void test1()
  18. {
  19.         int a = 11;
  20.         int b = 22;
  21.         int c = 33;
  22.        
  23.         //如果函数模板和普通函数都可以实现,优先调用普通函数
  24.         add1(a,b);
  25.        
  26.         //通过空模板参数列表,强制调用函数模板
  27.         add1<>(a,b);
  28.        
  29.         //函数模板也可以发生重载
  30.         add1(a,b,c);
  31.        
  32.         //如果函数模板可以产生更好的匹配,优先调用函数模板
  33.         char p = 'a';
  34.         char q = 'b';
  35.        
  36.         add1(p,q);
  37. }


  38. int main()
  39. {
  40.         test1();
  41.        
  42.         return 0;
  43. }
复制代码

                                            渣渣在线求指导

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-17 13:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表