设为首页 加入收藏

TOP

8.8 完美转发(3)
2013-10-07 16:08:48 来源: 作者: 【 】 浏览:58
Tags:8.8 完美 转发

8.8  完美转发(3)

现在,在Person类中去掉加了注释符号的代码行中的注释符号,并给其上面的一行代码加上注释符号。现在构造函数的实参不再转发,其输出是:

  1. Creating Person(string("Ivor") , string("Horton")) - rvalue arguments:  
  2. Lvalue Name constructor.  
  3. Lvalue Name constructor.  
  4. Person is Ivor Horton  
  5. Creating Person(first , second) - lvalue arguments:  
  6. Lvalue Name constructor.  
  7. Lvalue Name constructor.  
  8. Person is Fred Fernackerpan  
  9. Creating Person(first , string("Bloggs")) - lvalue, rvalue arguments:  
  10. Lvalue Name constructor.  
  11. Lvalue Name constructor.  
  12. Person is Fred Bloggs  
  13. Creating Person("Richard" , "Horton") - rvalue const char* arguments:  
  14. Rvalue Name constructor.  
  15. Rvalue Name constructor.  
  16. Person is Richard Horton  

这与没有应用完美转发功能的情况相一致,但最后一个Person对象除外。如不使用完美转发,如何调用带rvalue引用形参的Name构造函数?答案是:字面量保持rvalue。如果允许把字面量实参表示为lvalue就可以修改它,这与字面量的定义相悖。

在Person类中为构造函数使用模板有一个重要的方面,它允许从两个实参中创建一个Person对象,这两个实参可以是临时的string对象、lvalue字符串对象,以空字符结尾的临时字符串,或以空字符结尾的lvalue字符串。为了提供这两个实参而不使用模板,需要编写16个类构造函数。而使用模板源代码会短得多,如果使用的构造函数实参组合少于16个,可执行的模块就较小。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇8.8 完美转发(2) 下一篇8.9.1 类接口的概念

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·python数据分析岗的 (2025-12-25 10:02:21)
·python做数据分析需 (2025-12-25 10:02:19)
·成为一个优秀的pytho (2025-12-25 10:02:16)
·Java后端面试实习自 (2025-12-25 09:24:21)
·Java LTS版本有哪些 (2025-12-25 09:24:18)