1. C 风格字符串指针和字符串字面常量

cout « debug_rep ("hi world!" ) << endl; / / 调用 debug_rep (T* )

三个 debug_rep 版本都可行
• debug_rep (const T&)// T 被绑定到char [10 ]。
• debug_rep (T*) // T 被绑定到 const char。//T更加实例化 , 编译器会选择它。
• debug_rep (const string&)//要求从 const char
到string的类型转换。

对给定实参来说, 两个模板都提供精确匹配一第二个模板需要进行一次( 许可的) 数组到指针的转换, 而对于函数匹配来说, 这种转换被认为是精确匹配。 非模板版本是可行的, 但需要进行一次用户定义的类型转换, 因此它没有精确匹配那么好, 所以两个模板成为可能调用的函数。

1.1 如果我们希望将字符指针按 string 处理, 可以定义另外两个非模板重载版本:

//将字符指针转换为 string, 并调用 string 版本的 debug
string debug_rep (char *p)
{return debug_rep (string (p) );
}string debug_rep (const char * p )
{return debug_rep (string (p) ) ;
}

1.2 缺少声明可能导致程序行为异常

debug_rep (const string&) 的声明必须在作用域中。 否则, 就可能调用错误的debug_rep 版本:
( 代码不会编译失败)


template <typename T> string debug_rep (const T &t );
template <typename T> string debug_rep (T *p);//为了使 debug_rep (char* ) 的定义正确工作, 下面的声明必须在作用域中
string debug_rep (const string &);
string debug_rep (char *p)
{// 如果接受一个 const strings的版本的声明不在作用域中,// 返回语句将调用 debug_rep (const T & ) 的 T 实例化为 string 的版本return debug_rep (string (p) );
}

C++ Primer 5th笔记(chap 16 模板和泛型编程)重载模板和类型转换相关推荐

  1. C++ Primer 5th笔记(6)chapter6 函数: 重载

    1. const_cast和重载 const string sumLength(const string &s1, const string &s2) {return s1; } st ...

  2. C++ Primer 5th笔记(chap 16 模板和泛型编程)模板特例化

    1. 场景 //第一个版本:可以比较任意两个类型 template <typename T> int compare (const T &, const T & );//第 ...

  3. C++ Primer 5th笔记(chap 16 模板和泛型编程)重载与模板

    1. 定义 函数模板可以被另一个模板或一个普通非模板函数重载: 名字相同的函数必须具有不同数量或类型的参数 1.1 函数模板匹配因素 对于一个调用, 其候选函数包括所有模板实参推断成功的函数模板实例. ...

  4. C++ Primer 5th笔记(chap 16 模板和泛型编程)转发

    1. 转发 某些函数需要将其一个或多个实参连同类型不变地转发给其他函数. 因此需要保持被转发实参的所有性质, 包括实参类型是否是 const 的以及实参是左值还是右值. //接受一个可调用对象和另外两 ...

  5. C++ Primer 5th笔记(chap 16 模板和泛型编程)默认模板实参

    1. 默认模板实参default template argument compare 有一个默认模板实参 less和一个默认函数实参 F () template <typename T, typ ...

  6. C++ Primer 5th笔记(chap 16 模板和泛型编程)模板实参

    1. 类型参数可以使用任何名字(通常命名为 T) template <typename Foo> Foo calc (const Foo& a, const Foo& b) ...

  7. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板和友元

    1. 定义 如果一个类模板包含一个非模板友元,则友元被授权可以访问所有模板实例.如果友元自身是模板,类可以授权给所有友元模板实例,也可以只授权给特定实例. 1.1 一对一友好关系 类模板与另一个(类或 ...

  8. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板成员函数的实例化

    1. 默认情况下,一个类模板的成员函数只有当程序用到它时才进行实例化. (即使某种类型不能完全符合模板操作的要求(参见9.2节,第294页),我们仍然能用该类型实例化类todo). eg. //实例化 ...

  9. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板定义

    1. 定义 类似函数模板,类模板以关键字template开始,后跟模板参数列表.在类模板(及其成员)的定义中,我们将模板参数当作替身,代替使用模板时用户需要提供的类型或值: template < ...

  10. C++ Primer 5th笔记(chap 16 模板和泛型编程)类型无关和模板编译

    1. 编写类型无关的代码 泛型代码的两个重要原则: 模板中的函数参数是const的引用. 函数体中的条件判断仅使用<比较运算. 大多数类型,包括内置类型和我们已经用过的标准库类型(除unique ...

最新文章

  1. 谷歌如何评估产品经理?
  2. 深度丨AI 与区块链:两大热门技术,会碰撞出什么样的火花?
  3. matlab 读取文件的精度,读取数据文件精度问题!真心求大神赐教 - 程序语言 - 小木虫 - 学术 科研 互动社区...
  4. Fragment专辑(三):Fragment的添加(add)和替换(replace)的不同
  5. 权限设计中的数据灵活存储设计策略参考[以不变应万变]
  6. 对标 VS Code,JetBrains 的下一代 IDE :Fleet
  7. threejs 影子属性_影子场vs.属性访问器接口第2轮
  8. 预编译对象解决SQL注入问题
  9. checksum命令 linux_linux命令详解:md5sum命令
  10. Python库:random库
  11. 支付宝核心工程师谈如何成为一名优秀的程序员?
  12. ctf xor题_CTF下的命令执行
  13. flex与j2ee的结合(flex+Spring)
  14. 嵌入式开发Verilog教程(三)——Verilog HDL基本语法汇总(上)
  15. 导航一体机端口测试软件,车载GPS检测端口和屏幕分辨率的软件:PADTOOL
  16. 经纬度校验、整数和小数校验
  17. 天翼云服务器ubuntu20.04安装Mysql记录
  18. 实现内网(局域网)控制所有电脑一键关机并且系统还原的方案
  19. shell foreach
  20. FusionCompute集群知识

热门文章

  1. $(function() {})是干什么的及作用
  2. linux 服务器基本信息,查看linux服务器基本信息
  3. 利用计算机进入,1、在第四代计算机期间内,计算机的应用逐步进入到()
  4. php实现微信清粉功能,PHP实现微信提现功能
  5. 网络技术工程师专业核心 | 网络技术工程师就业方向
  6. 浅谈巴拿马电源的谐波消除原理
  7. java dbcp_Java dbcp连接池基本使用方法详解
  8. mysql服务器证书验证提供信任库_连接到MySQL数据库时有关SSL连接的警告
  9. ML之FE:基于BigMartSales数据集利用Featuretools工具(1个dataframe表结构切为2个Entity表结构)实现自动特征工程之详细攻略
  10. AI之NLP:自然语言处理技术简介(是什么/学什么/怎么用)、常用算法、经典案例之详细攻略(建议收藏)