C++模板函数重载不同之处点评

开发 后端
大家可能对C++模板函数的理解还是有些不足之处。不要紧,今天我们就可以通过对C++模板函数重载的要点分析来充分掌握这一函数的应用。

C++编程语言中,有一种比较特殊的函数叫做模板函数。不过实际上它与普通的函数还是多少有些相同之处的。在这里我们将会为大家讲解一下C++模板函数重载中,不同于普通函数应用的几点注意事项。

1:实例化后的模版函数如果和某个非模版函数的调用一样的情况,会调用非模版函数。但也可以指定调用模版函数,如:

  1. inline int const& max(int const& a, int const& b)  
  2. {  
  3. // 为了便于区分,让返回结果+100  
  4. return a < b ? a+10 : b+100;  
  5. }  
  6. template <typename T> 
  7. inline T const& max(T const& a, T const& b)  
  8. {  
  9. return a < b ? b : a;  
  10. }  
  11. // 这里模版函数实例化后的形式和一个非模版函数一致。
    可以使用下面的方法指定调用模版函数  
  12. int i = max<>(42, 66); 

2:由于C++模板函数重载的参数是类型,因此它不支持类型转化。但非模版函数支持类型转换:

  1. inline int const& max(int const& a, int const& b)  
  2. {  
  3. return a < b ? b : a;  
  4. }  
  5. template<typename T> 
  6. inline T const& max(T const& a, T const& b)  
  7. {  
  8. return a < b ? b : a;  
  9. }  
  10. // 由于模版函数不支持类型转换,这里将调用非模版的max函数  
  11. max('c', 42.2); 

试想上面的代码中,如果max('c', 42.2)要调用模板的max函数,它必须满足两个参数和返回值都是同一类型的条件。而给定的两个参数类型不一致,模板函数又不支持类型转换。因此,它找不到相匹配的模板函数,将会调用非模板的max函数。而如果我们强制使用max<>('c', 42.2)调用模板函数的话将会出现编译错误。

以上就是对C++模板函数重载的相关介绍。

【编辑推荐】

  1. C++模板参数具体概念讲解
  2. C++左值与右值之间共同与不同点解析
  3. C++使用接口基本实现方式解析
  4. C++对象复制相关应用方式浅析
  5. C++自定义类实际操作代码浅析
责任编辑:曹凯 来源: 博客园
相关推荐

2010-02-06 09:31:42

C++函数对象

2009-08-20 10:39:00

Java与C#的不同之

2010-02-03 09:52:52

C++指针与引用

2009-11-26 19:18:59

PHP函数implod

2021-03-09 16:38:48

加密货币比特币货币

2010-03-10 10:58:12

python接口功能

2012-08-23 13:36:27

2010-04-26 17:24:56

Unix操作系统

2017-03-14 15:46:30

AndroidiOS不同之处

2012-08-31 11:21:12

云计算大数据

2009-12-15 18:47:56

Ruby框架OG

2010-01-08 14:35:24

VB.NET模块

2010-04-20 16:07:25

Oracle DRCP

2010-01-18 16:56:30

C++函数

2010-09-27 10:43:35

无线路由器

2010-05-06 10:09:44

Oracle in

2010-04-08 11:11:16

Oracle查询

2021-11-14 22:06:48

JavaPython方式

2014-08-14 17:11:51

LinuxWindows

2023-08-10 17:23:10

LibreOfficOpenOffice
点赞
收藏

51CTO技术栈公众号