• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++Templates读书笔记函数模版

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  C++ Templates读书笔记< 一 > 函数模版

* 并不是把模板编译成一个可以处理任何类型的单一实体,而是对于实例化模板参数的没种类型,都从模板产生出一个不同的实体。
* 具体类型代替模板参数的过程,叫做“实例化”
* 模板被编译了两次:
1。 实例化之前,检查模板本身的语法
2。 实例化期间,察看是否所有的调用都有效
* 函数模板内部,不能制定缺省的模板实参(类模板可以)。
* 函数模板的实参演绎:调用参数的类型构造自模板参数,所以模板参数和调用参数通常是相关的。
 模板实参演绎并不适合返回类型。
* eg:
            1 template< typename T1, typename T2 >
                 2 inline T1 max( T1 const& a, T2 const& b )
                 3 {
                 4      return a < b ? b : a;
                 5 }
注:返回类型不能是引用。因为若返回T2类型实参,则T2需要转为T1,这个过程将会创建一个新的局部临时变量。
* 重载函数模版:
a> 一个非模板函数可以和一个同名的模版函数同时存在,并且该模板函数还可以被实例化为这个非模板函数。
b> 模板不允许自动类型转换,但普通非模板函数可以。
eg:
 1         inline int const& max( int const& a, int const& b )
 2         {
 3             return a < b ? b : a;
 4         }
 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         max( 7.042.0 );       // 调用max<double>
13         max( 'a''b' );         // 调用max<char>
14         max( 742 );            // 调用int重载的非函数模板
15         max<>742 );        // 调用max<int>            上述 a>
16         max<double>742 ); // 调用max<double>    没有实参演绎
17         max< 'a'42.7 >;      // 调用int重载的非函数模板    上述 b>
c> 函数的所有重载版本的声明都应该位于函数被调用的位置之前

版权声明:本篇为原创文章,允许转载,但转载时请务必以超链接形式标明文章的原始出处和作者信息。请尊重本人的劳动成果,谢谢!
小祥的BLOG http://xfxsworld.cnblogs.com

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#3.0Cookbook:二、字符与字符串处理(1):判断字符类型发布时间:2022-07-13
下一篇:
【c++】多重继承与虚继承发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap