出版者的忠告
============
使用代码示例
------------
这本书可以让你的工作得心应手。一般来说,如果在本书中提供了示例代码,你可以在你的程序和文档中。你不必为了代码的权限而联系我们,除非你要重新造一个伟大的轮子。举个例子,从书中代码编写一系列代码片段不需要授权,但是贩卖和分发O’Reilly的书籍代码的CD-ROM是需要授权的。引用本书和本书的例子代码来回答一些问题是不需要授权的,但是把很多的书中的代码整合进入你的产品文档里面是需要授权的。
我们会很高兴,但不是强迫引用归属。一个常见的写法包括标题,作者,出版社和ISBN号。举个例子:“Effective Modern C++ by Scott Meyers
(O’Reilly). Copyright 2015 Scott Meyers, 978-1-491-90399-5.”
如果你觉得你对本书中的示例代码的使用超出了上述的权利要求范围,欢迎通过permissions@oreilly.com联系我们
Safari® Books Online
--------------------
[Safari Books Online](http://safaribooksonline.com/)是一个应需求的分发世界级领先的技术和商业作家的书籍和视频[内容](https://www.safaribooksonline.com/explore/)的电子库。
技术专家,软件开发者,web设计师和商务与创新型人士使用Safari Books Online作为他们的主力资源进行科研,解决问题,学习和认证训练。
Safari Books Online为企业用户,政府部门,教育用户和个人提供一些列的[计划和打折](https://www.safaribooksonline.com/pricing/)
成员可以有权利访问上像O’Reilly Media,Prentice Hall Professional,Addison-Wesley Professional,Microsoft Press,Sams,Que,Peachpit Press,Focal Press,Cisco Press,John Wiley & Sons,Syngress,Morgan
Kaufmann,IBM Redbooks,Packt,Adobe Press,FT Press,Apress,Manning,New Riders,McGraw-Hill,Jones & Bartlett,Course Technology和成百[更多](https://www.safaribooksonline.com/our-library/)这样的可查询的数据库中的千本书籍,训练视频和重新出版的原稿。想获得更多关于Safari Books Online的信息,请访问我们的[网站](http://safaribooksonline.com/)。
如何联系我们
------------
关于本书的评论和问题可以联系出版社:
> O’Reilly Media, Inc.
> 1005 Gravenstein Highway North
> Sebastopol, CA 95472
> 800-998-9938 (in the United States or Canada)
> 707-829-0515 (international or local)
> 707-829-0104 (fax)
想问关于本书的技术性问题,可以发送邮件到 bookquestions@oreilly.com
想获得更多的关于本书的信息,课程,会议和新闻,参考我们的网站[http://www.oreilly.com/](http://www.oreilly.com/)
Facebook:[http://facebook.com/oreilly](http://facebook.com/oreilly)
Twitter:[http://twitter.com/oreillymedia](http://twitter.com/oreillymedia)
YouTube:[http://www.youtube.com/oreillymedia](http://www.youtube.com/oreillymedia)
- 出版者的忠告
- 致谢
- 简介
- 第一章 类型推导
- 条款1:理解模板类型推导
- 条款2:理解auto类型推导
- 条款3:理解decltype
- 条款4:知道如何查看类型推导
- 第二章 auto关键字
- 条款5:优先使用auto而非显式类型声明
- 条款6:当auto推导出非预期类型时应当使用显式的类型初始化
- 第三章 使用现代C++
- 条款7:创建对象时区分()和{}
- 条款8:优先使用nullptr而不是0或者NULL
- 条款9:优先使用声明别名而不是typedef
- 条款10:优先使用作用域限制的enmu而不是无作用域的enum
- 条款11:优先使用delete关键字删除函数而不是private却又不实现的函数
- 条款12:使用override关键字声明覆盖的函数
- 条款13:优先使用const_iterator而不是iterator
- 条款14:使用noexcept修饰不想抛出异常的函数
- 条款15:尽可能的使用constexpr
- 条款16:保证const成员函数线程安全
- 条款17:理解特殊成员函数的生成
- 第四章 智能指针
- 条款18:使用std::unique_ptr管理独占资源
- 条款19:使用std::shared_ptr管理共享资源
- 条款20:在std::shared_ptr类似指针可以悬挂时使用std::weak_ptr
- 条款21:优先使用std::make_unique和std::make_shared而不是直接使用new
- 条款22:当使用Pimpl的时候在实现文件中定义特殊的成员函数
- 第五章 右值引用、移动语义和完美转发
- 条款23:理解std::move和std::forward
- 条款24:区分通用引用和右值引用
- 条款25:在右值引用上使用std::move 在通用引用上使用std::forward
- 条款26:避免在通用引用上重定义函数
- 条款27:熟悉通用引用上重定义函数的其他选择
- 条款28:理解引用折叠
- 条款29:假定移动操作不存在,不廉价,不使用
- 条款30:熟悉完美转发和失败的情况
- 第六章 Lambda表达式
- 条款31:避免默认的参数捕捉
- 条款32:使用init捕捉来移动对象到闭包
- 条款33:在auto&&参数上使用decltype当std::forward auto&&参数
- 条款34:优先使用lambda而不是std::bind
- 第七章 并发API
- 条款35:优先使用task-based而不是thread-based
- 条款36:当异步是必要的时声明std::launch::async
- 条款37:使得std::thread在所有的路径下无法join
- 条款38:注意线程句柄析构的行为
- 条款39:考虑在一次性事件通信上void的特性
- 条款40:在并发时使用std::atomic 在特殊内存上使用volatile
- 第八章 改进
- 条款41:考虑对拷贝参数按值传递移动廉价,那就尽量拷贝
- 条款42:考虑使用emplace代替insert