【《C++23高级编程》上市,吴咏炜老师这样评价】
给《C++20高级编程(第5版)》写了推荐序后,时隔3年,我很高兴看到更新版的《C++23高级编程》问世了。
《C++23高级编程(第6版)》延续之前版本备受赞誉的优点,是一本真正从程序员视角出发、专为程序员量身打造的实用教材,能帮助初、中级C++程序员全面提升其C++专业技能。作者以深厚的专业功底和丰富的一线编程经验,精心打造了这本佳作,提供了完整的到C++23为止的C++语言介绍,从入门语法、高级技巧到软件工程,做了全方位、无死角的介绍,每个知识点都讲解得细致入微。无论你想系统学习C++,还是要找其中某些语法点的参考资料,都将收获实实在在的帮助。
与某些C++教材不同,《C++23高级编程(第6版)》不是简单地在以前的版本上打个小补丁出来卖钱,而是根据当前C++标准(C++23)进行了全面更新。从最基本的Hello World程序,读者就能看到与传统的C++程序的不同:代码使用了import std和std::println这两个新特性,而非使用#include和std::cout。而后面讨论较新特性的时候,也莫不如此,比如,几乎处处可以看到模块和println。类似地,另外一些“较新”的C++特性(如C++17的string_view和结构化绑定,C++20的三向比较运算符,等等),也较早得到介绍,并在书中多次出现。如果你新学C++的话,可不带历史包袱地看到一门现代的高性能编程语言。如果你之前学过一点C++,也可细细品味现代C++带来的不同,特别是模块引入后对代码组织产生的巨大影响。
既然是个新版本,中文书名里又有“C++23”,本书当然要重点描述C++23的特性。除了标准库模块和print/println,C++23的主要新特性——如显式对象参数、mdspan和Unicode表示改进——书里也都进行了介绍。在描述C++23特性时,书的侧边通常会出现特殊的带圈“C++23”标记,非常清晰。
《C++23高级编程(第6版)》的英文主书名与上一版相同,都是Professional C++,自然,它希望你能专业地对待C++编程。本书的内容编排也十分合理。
第I部分包括三章,以较短篇幅介绍了C++的主要语法和功能,让你快速上手C++。
第II部分的三章不讲语言了,转而讲软件设计。毕竟,我们使用C++的目的是设计出好的软件。写程序不是工作目的。
第III部分是本书的重点,介绍C++编码方法。该部分占了全书的大部分章节和篇幅,具体讲解C++中的各个重要特性和库。日常用到的绝大部分功能,都会在这一部分讲到,如内存管理、基本模板、泛型、错误处理、容器、时间工具等。
第IV部分较为简短,有三章,描述了一些高级技巧,仍然是C++的技术内容。
第V部分又超越了C++语言本身,用了整整7章的篇幅讨论C++项目的软件工程问题,从软件生命周期、测试、调试、设计模式等各个角度进行探讨。这一部分的广度大于深度,对于项目经验不多的程序员来说,尤其有用。
要说我对这本书有什么意见的话,最主要就是作者对广度的追求了。对于某些不推荐(如bind)或不常用的特性,作者仍有所着墨;而对另一些内容(如协程),作者只是一带而过。因为某些特性不常用,描述中也容易发生问题,如14.8.3节的function-try-blocks例子中包含错误行为,29.3.2节的launder例子也有更简单的写法。不过,这也是作者自己的定位选择吧。此外,作者给出的建议里,至少有一项我持保留意见:作者建议把非final类的构造函数以外的方法全部设为virtual——这个建议,从我对C++的理解看,也许能适用于某些领域,但绝非放之四海皆准。事实上,标准库的类没有一个标成final,只有少数类中用到了virtual。
无论如何,作为一本中级教材,《C++23高级编程(第6版)》的表现堪称出色。作者的绝大部分建议都极具实用性和可靠性。相信随着学习程度的加深,读者自会有能力去辨别和领悟其中的精妙之处。
好书要有好的翻译。《C++23高级编程(第6版)》的译者有两位我打过交道,都是热心于C++知识传播的年轻才俊。初览译稿,便感受到内容相当清晰晓畅,对于这么厚重的一本大块头教材,也是殊为不易了。在此衷心盼望广大C++学习者都能从此书中受益,成长为更优秀的C++程序员。
吴咏炜
Boolan首席技术咨询师
《C++实战:核心技术与最佳实践》作者
想了解更多关于《C++23高级编程(第6版)》的内容,请看下面《C++23高级编程(第6版)》([比],马克·格雷瓜尔(Marc,Gregoire))【摘要 书评 试读】- 京东图书