设为首页 加入收藏

TOP

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

8.8  完美转发(2)

使用这些类的程序如下:
 

  1. // Ex8_11.cpp  
  2. // Perfect forwarding  
  3. #include <iostream> 
  4. #include <utility> 
  5. #include <string> 
  6. using std::string;  
  7. using std::cout;  
  8. using std::endl;  
  9. using std::forward;  
  10. using std::move;  
  11. // Put the Name class definition here...  
  12. // Put the Person class definition here...  
  13. int main()  
  14. {  
  15. cout << "Creating Person(string(\"Ivor\") , string(\"Horton\")) - rvalue arguments:"  
  16. << endl;  
  17. Person me(string("Ivor") , string("Horton"));  
  18. cout << "Person is " << me.getName() << endl << endl;  
  19. string first("Fred");  
  20. string second("Fernackerpan");  
  21. cout << "Creating Person(first , second) - lvalue arguments:" << endl;  
  22. Person other(first,second);  
  23. cout << "Person is " << other.getName() << endl << endl;  
  24. cout    << "Creating Person(first , string(\"Bloggs\")) - lvalue, rvalue arguments:"  
  25. << endl;  
  26. Person brother(first , string("Bloggs"));  
  27. cout << "Person is " << brother.getName() << endl << endl;  
  28. cout << "Creating Person(\"Richard\" , \"Horton\")) - rvalue const char* arguments:"  
  29. << endl;  
  30. Person another("Richard", "Horton");  
  31. cout << "Person is " << another.getName() << endl << endl;  
  32. return 0;  
  33. }  

这个例子的输出如下:
 

  1. Creating Person(string("Ivor") , string("Horton")) - rvalue arguments:  
  2. Rvalue Name constructor.  
  3. Rvalue 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. Rvalue 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构造函数的对应实参是一个lvalue引用时,就调用带lvalue引用形参的Name构造函数;当Person构造函数的实参是一个rvalue时,就调用带rvalue引用形参的Name构造函数。显然,std::forward()函数的工作方式与期望的相同。
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇8.8 完美转发(1) 下一篇8.8 完美转发(3)

评论

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

·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)