书海网短评:
想要彻底理解C++11和C++14,不可止步于熟悉它们引入的语言特性(例如,auto型别推导、移动语义、lambda表达式,以及并发支持)。挑战在于高效地运用这些特性,从而使你的软件具备正确性、高效率、可维护性和可移植性。这
想要彻底理解C++11和C++14,不可止步于熟悉它们引入的语言特性(例如,auto型别推导、移动语义、lambda表达式,以及并发支持)。挑战在于高效地运用这些特性,从而使你的软件具备正确性、高效率、可维护性和可移植性。这正是《Effective Modern C++(中文版)》意欲达成的定位。它描述的正是使用C++11和C++14(即现代C++)来编写真正卓越的软件之道。
《Effective Modern C++(中文版)》沿用了ScottMeyers早期作品中业已证明的基于指导原则和实例驱动的格式,但介绍的是全新材料。《Effective Modern C++(中文版)》是所有C++软件开发工程师的必读之选。
涵盖以下主题:
大括号初始化、noexcept规格、完美转发,以及智能指针的make函数的优缺点。
std::move、std::forward、右值引用和万能引用之间的联系。
编写整洁、正确,以及高效的lambda表达式的方法。
std::atomic和volatile有怎样的区别,它们分别用于什么场合,以及它们和C++的并发API有何联系。
“旧”C++程序设计(即C++98)中的实战要求在现代C++的软件开发中作出哪些修订。
20多年来,ScottMeyers的EffectiveC++丛书(包括《EffectiveC++》、《MoreEffecitveC++》和《EffectiveSTL》)已经为C++程序设计指南的业界设立标杆。他清晰明了引人入胜的、对复杂技术材料进行条分缕析的阐释为他赢得了世界范围内的称誉,也使他成为一名广受欢迎的培训师、咨询顾问和会议讲师。他拥有布朗大学计算机科学专业的博士学位。
“学会了C++基础知识以后,是ScottMeyers的EffectiveC++丛书教会了我如何在产品代码中运用C++。《Effective Modern C++(中文版)》是具有重要性的一本学习手册,它给你关于核心指导原则、程序设计风格和习惯用法方面的建议,使你能够高效地、适当地使用现代C++。手头还没有一本这样的书吗?就买这本,就趁现在!”
——HerbSutter
C++标准委员会主席,微软公司C++软件架构师
对C还有爱吗?理应如此!现代C(即C11/C14)远不止是修修补补。考虑所有的新功能,这简直是一门语言的脱胎换骨。你在寻求指导和帮助吗?那么《Effective Modern C++(中文版)》肯定就是你想找的。关于C,ScottMeyers一直是精确、质量和惊喜的代名词。
——GerhardKreuzer,西门子股份公司研发工程师
精深的专业人士很难寻觅。完美主义的传道授业——讲求策略和言简意赅的作者也是一人难求。当你发现两者体现在同一个人身上时,你知道你找到的会是一种享受。《EffectiveModernC》是一位完美的技术作家高山仰止的成就。它在错综复杂、相互联系的话题之间游走,条分缕析地、意义明确地、井井有条地进行了阐明,而所有这些都在洗练的文笔中娓娓道来。你不太可能在《EffectiveModernC》中找到技术错误,枯燥段落,甚至偷懒的词句。
——AndreiAlexandrescu博士,Facebook研究科学家,《ModernCDesign》作者
作为拥有超过20年C经验的人,为了充分利用现代C(既要习得*实践,又要避免各种陷阱),我强烈建议你阅读《Effective Modern C++(中文版)》、彻底阅读《Effective Modern C++(中文版)》,并经常参考它!当然,我从《Effective Modern C++(中文版)》中学到了很多新知识!
——NevinLiberDRW,交易集团公司高级软件工程师
C的缔造者BjarneStroustrup如是说:“C11感觉像是一种新的语言。”
《EffectiveModernC》使得我们能够清楚地向日常使用C的软件工程师解释,如何从C11/C14的新特性和习惯用法中受益,并和他们产生共鸣。
ScottMeyers出品,必属精品!
——CassioNeriFX定量分析师,劳埃德银行集团
Scott掌握了从复杂性中抽出容易理解的内核这个窍门。他的EffectiveC丛书有助于改善上一代C程序员的程序设计风格,而这本新书似乎定位于为使用现代C的人做同样的事情。
——RogerOrrOR/2有限公司,ISOC标准委员会成员
《EffectiveModernC》是提高你的现代C技能的上佳工具。它不仅教会你如何使用、何时何地使用现代C,而且还是有效地使用。它还解释了背后的原因何在。毫无疑问,Scott清晰而有见地的文字分布在42个经过精心思考的条款上,使得程序员能够更好地理解这门语言。
——BartVandewoestyne,研发工程师,C爱好者
我喜欢C,几十年来它一直是我在工作中使用的工具。而且,它的*特性比我以前想像的更强大、更富有表现力。但是,所有这些选择都带来了一个问题:“何时以及如何应用这些特性呢?”如以往一样,Scott的EffectiveC丛书是这个问题的明确答案。
——DamienWatkinsCSIRO,计算软件工程组组长
这是一本关于过渡到现代C的上佳读物,新的C11/14语言特性被和C98参照着描述,主题条款很容易参读,并且在每个部分末尾都给出了总结性建议。无论对于入门还是高级的C开发工程师,《Effective Modern C++(中文版)》都既有娱乐性又有实用性。
——RachelCheng,F5网络
如果你正在从C98/03迁移至C11/14,则肯定需要Scott在《EffectiveModernC》中提供的极其实用而清晰的信息。如果你已经在撰写C11代码,那么可能会通过Scott针对该语言的主要新功能的深入讨论来发现新功能的问题所在。无论你的情况属于哪一种,《Effective Modern C++(中文版)》*值得你为阅读而付出的时间。
——RobStewartBoostSteering,委员会成员(boost.org)
目录
出版商声明1
致谢3
绪论7
第1章型别推导15
条款1:理解模板型别推导15
条款2:理解auto型别推导23
条款3:理解decltype28
条款4:掌握查看型别推导结果的方法35
第2章auto41
条款5:优先选用auto,而非显式型别声明41
条款6:当auto推导的型别不符合要求时,使用带显式型别的初始化物习惯用法46
第3章转向现代C++52
条款7:在创建对象时注意区分()和{}52
条款8:优先选用nullptr,而非0或NULL61
条款9:优先选用别名声明,而非typedef64
条款10:优先选用限定作用域的枚举型别,而非不限作用域的枚举型别68
条款11:优先选用删除函数,而非private未定义函数74
条款12:为意在改写的函数添加override声明79
条款13:优先选用const_iterator,而非iterator85
条款14:只要函数不会发射异常,就为其加上noexcept声明89
条款15:只要有可能使用constexpr,就使用它95
条款16:保证const成员函数的线程安全性101
条款17:理解特种成员函数的生成机制106
第4章智能指针113
条款18:使用std::unique_ptr管理具备专属所有权的资源115
条款19:使用std::shared_ptr管理具备共享所有权的资源120
条款20:对于类似std::shared_ptr但有可能空悬的指针使用std::weak_ptr129
条款21:优先选用std::make_unique和std::make_shared,而非直接使用new133
条款22:使用Pimpl习惯用法时,将特殊成员函数的定义放到实现文件中141
第5章右值引用、移动语义和完美转发150
条款23:理解std::move和std::forward151
条款24:区分万能引用和右值引用156
条款25:针对右值引用实施std::move,针对万能引用实施std::forward161
条款26:避免依万能引用型别进行重载169
条款27:熟悉依万能引用型别进行重载的替代方案175
条款28:理解引用折叠187
条款29:假定移动操作不存在、成本高、未使用193
条款30:熟悉完美转发的失败情形196
第6章lambda表达式204
条款31:避免默认捕获模式205
条款32:使用初始化捕获将对象移入闭包212
条款33:对auto&&型别的形参使用decltype,以std::forward之217
条款34:优先选用lambda式,而非std::bind220
第7章并发API228
条款35:优先选用基于任务而非基于线程的程序设计228
条款36:如果异步是必要的,则指定std::launch::async232
条款37:使std::thread型别对象在所有路径皆不可联结236
条款38:对变化多端的线程句柄析构函数行为保持关注243
条款39:考虑针对一次性事件通信使用以void为模板型别实参的期值247
条款40:对并发使用std::atomic,对特种内存使用volatile254
第8章微调263
条款41:针对可复制的形参,在移动成本低并且一定会被复制的前提下,考虑将
其按值传递263
条款42:考虑置入而非插入273
推荐序
一份宏大的作品,能够带动一个领域的蓬勃发展。C++社群在相对沉寂十数年之后迎来新一波热潮,原因是,作为一门编程工具的最核心,C++的语言和标准库都出现巨大的扩展和强化。这一番大变革始自2011,并分别在2014、2017持续进化。业界习惯性地将这些新版本统称为ModernC++,用以区别“传统”C++。
作为知名书系的最新作品,《EffectiveModernC++》的佳质和佳评一如其早期同门作品《EffectiveC++》和《MoreEffectiveC++》。《Effective Modern C++(中文版)》延续作者ScottMeyers的一贯风格和质量,其最大特质就是,不但告诉我们How,更用巨大而精良的篇幅告诉我们Why。作者穷追猛打讲究再三的劲儿,常让我筋疲力尽,痛并快乐地爬行于某个条款之际拍案而叹:
“天啊,还有下一页!”
而我,是一个在C++领域已经生活25年的老兵。
是的,我是一个在C++领域生活了25年的老兵,这意味着我具备相当的C++能力。
尽管如此,面对这号称全新语言的ModernC++,我时或也有力不能逮、掩卷长叹的焦躁,特别是面对RvalueReference(右值引用)、PerfectForwarding(完美转发)、Metaprogramming(元编程)、TypeDeduction(类型推导)、TypeTraits(型别特征)等艰涩主题的时候。然而正是在特别艰涩的主题上你可以领受《Effective Modern C++(中文版)》的巨大价值:如果你想完善根基,《Effective Modern C++(中文版)》是你的唯一选择。
这样一本好书引介到中国,需要一位好译者和一家好出版社。高博先生是非常用心的好译者,技术上和文字上学养俱佳。我和他结缘于多年前的emails,因着他的用功和成果,深感此书所托得人。诚如各位所见,这是一本编排与细节俱皆上乘的出版物;我曾经亲手编排超过50《Effective Modern C++(中文版)》,完全知道这样的呈现需要多少细琐的步骤和细心的浇灌。《Effective Modern C++(中文版)》的出版质量足以标示中国计算机图书的长足进步和精益求精。
侯捷
WhiteRock









