Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39576
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 82
  • 用 户 组: 普通用户
  • 注册时间: 2013-07-19 14:23
个人简介

本尊不死,尔等终究为奴...

文章分类

全部博文(8)

文章存档

2016年(1)

2015年(4)

2013年(3)

我的朋友

分类: C/C++

2015-12-12 21:00:53

函数模版遇上函数重载话题探讨:
1. 与普通函数不一样,模版函数不允许自动类型转换;
2. 模版函数可以像普通函数一样被重载;
3. C++编译器优先考虑普通函数;
4. 如果函数模版可以产生一个更好的匹配,那么选择模版;
5. 可以通过空模版实参列表的语法限定编译器只通过模版匹配。

点击(此处)折叠或打开

  1. #include <iostream>

  2. using namespace std;
  3. /* 函数模版重载
  4. 1. 与普通函数不一样,模版函数不允许自动类型转换;
  5. 2. 模版函数可以像普通函数一样被重载;
  6. 3. C++编译器优先考虑普通函数;
  7. 4. 如果函数模版可以产生一个更好的匹配,那么选择模版;
  8. 5. 可以通过空模版实参列表的语法限定编译器只通过模版匹配
  9. */

  10. int Max(int a, int b)
  11. {
  12.     cout << "int Max(int a, int b)" << endl;
  13.     return a > b ? a : b;
  14. }

  15. template<typename T>
  16. T Max(T a, T b)
  17. {
  18.     cout << "T Max(T a, T b)" << endl;
  19.     return a > b ? a : b;
  20. }

  21. template<typename T>
  22. T Max(T a, T b, T c)
  23. {
  24.     cout << "T Max(T a, T b, T c)" << endl;
  25.     return Max(Max(a, b), c);
  26. }

  27. int main()
  28. {
  29.     int a = 1;
  30.     int b = 2;

  31.     cout << Max(a, b) << endl;              // 当函数模版和普通函数都符合调用时, 优先选择普通函数
  32.     cout << Max<>(a, b) << endl;            // 若显式使用函数模版, 则使用<>类型列表
  33.     cout << Max<>(3.0, 4.0) << endl;        // 如果函数模版产生更好的匹配 使用函数模版
  34.     cout << Max<>(5.0, 6.0, 7.0) << endl;   // 重载
  35.     cout << Max<>('a', 100) << endl;        // 调用普通函数 可以隐式类型转换

  36.     return 0;
  37. }

阅读(1185) | 评论(0) | 转发(0) |
0

上一篇:运算符重载

下一篇:排序算法实现

给主人留下些什么吧!~~