C++实战:核心技术与最佳实践——少走弯路,高效进阶

C++专家吴咏炜新作《C++实战》正式上市,聚焦核心技术与最佳实践,助你少走弯路,高效进阶!

原文标题:我的新书上市了,助你实战 C++ 少走弯路!

原文作者:图灵编辑部

冷月清谈:

吴咏炜的新书《C++ 实战:核心技术与最佳实践》已正式上市。本书面向有一定编程经验的程序员,尤其适合那些在C++学习和实践中遇到瓶颈,渴望进阶的开发者。

本书并非系统性的语法大全,而是从实战角度出发,精选现代C++核心特性进行讲解,并结合作者丰富的项目经验,阐述每个特性存在的原因和适用场景,帮助读者理解“为什么”以及“如何用”,从而避免常见的陷阱。

本书涵盖了对象生存期和RAII、移动语义、模板、STL、视图、智能指针、错误处理、并发编程、异步编程以及常用工具等现代C++开发中的关键知识点。重点讲解如何运用这些“制式武器”,高效开发,为后续进阶学习打下坚实基础。

作者吴咏炜是国内知名的C++专家,拥有30年C/C++系统级软件开发和架构经验。他将自己多年的实战经验融入本书,旨在帮助读者少走弯路,快速掌握现代C++的核心技术和最佳实践。

怜星夜思:

1、书中提到的“视图”在实际项目中有哪些应用场景?它相比传统指针有哪些优势和劣势?
2、作者强调本书适合有一定编程经验的程序员。那么对于C++初学者,阅读本书之前需要掌握哪些基础知识?
3、书中提到了现代 C++ 的一些改进,例如移动语义、智能指针等。这些改进是如何解决传统 C++ 编程中的一些痛点的?

原文内容

大家好,我是吴咏炜,先祝大家新年快乐!也很开心在 2025 年伊始跟大家分享一下:我的新书《C++ 实战:核心技术与最佳实践》已经在各大网店全面上架!

因为 12 月中旬预售过一周签名版,想必有一部分朋友已经拿到了签名版——签名版比普通版的发货早了一点点,在此,感谢大家对这本书的喜爱。鉴于有更多的朋友并不认识我,也不认识这本书,因此,在新书上架之际,我重新来介绍一下这本书,也介绍一下我自己。

1. 为何写这本书

 Bjarne Stroustrup 博士把他的“带类的 C”重命名为“C++”开始算,C++ 已经有了超过 40 年的历史。这些年来,虽然也有不少起起落落,但 C++ 一直是一种非常重要的编程语言,是计算机世界里很多基础设施背后的基石。根据 TIOBE 网站,C++ 自 1987 年来的最差排名是第 名,并多次占据榜眼和探花之位。在多次起起伏伏之后,C++ 在 2023 年又回升到了第 名的位置,超过了Java,并赢得 2022 年“年度编程语言”(Programming Language of the Year)的称号,展示了它长盛不衰的生命力

已有好些年,我每年在 C++ 大会上进行演讲,介绍 C++ 方面的知识。在 2019 年,我开始在“极客时间”上开设专栏,专门介绍现代 C++  的一些知识点。在随后的几年里,我也做了不少 C++ 方面的培训和技术咨询工作。于是,在写了几十年的 C++ 代码之后,我终于觉得,可以把自己对 C++ 的认知写成书,让后来者可以少走一些弯路。

这是本书的书封

封面上有个狮子,你可以称它“狮子书”

这是参考大部分读者的喜好最后选定的

2. 这本书有何特色,适合哪些朋友阅读

当然,C++ 的书籍已经有很多了。本书的特点是什么?或者说,什么样的 C++ 学习者应该学习本书?

简单来说,本书偏向实战,从代码和使用场景的角度来讲解 C++ 特性,而非试图去对所有 C++ 的特性进行系统描述。我认为编程语言的学习方式应该更接近外语,而不是数学。我不会像 cppreference.com 一样描述所有的语法细节,而是根据我在软件项目获得的经验,来阐释某种特性存在的原因和适用的场景。当读者了解了我讲解的概念、方法之后,要进一步了解语法上的细节,可自行查阅网站——全面、详尽不是我的意图。

C++ 已经大到不需要学习“完整”的语言,正如我们学英语不需要把整本词典背下来一样。因此,本书是从一个实践者的角度出发,挑出了笔者认为最值得学习的基本方面:
  • 读本书所需的预备知识(复习和快速检查)
  • 对象生存期和 RAIIC++ 最重要的特性)
  • 移动语义(现代 C++ 最重要的新特性,全面影响代码组织)

  • 模板基础(现代 C++ 里到处是模板,即使你不会写,也得会用)

  • 标准模板库(STL)和相关知识(效率利器)

  • 视图(略新,也有一定使用风险,但至少比指针要好用)

  • 智能指针(全面替代有所有权的裸指针和手工 new/delete

  • 现代 C++ 的其他一些重要改进(初学者友好的特性和重要的新库)

  • 不同的错误处理方式(契约、异常的概念,及不使用异常的一些方法)

  • 如何传递对象(引用传参,还是值传参?)

  • 并发编程(应对多核世界的挑战)

  • 异步编程(一种不同的思维方式,但可以更好地利用资源)

  • C++ 程序员应当掌握的一些基础工具(最后稍稍讨论一下工程问题)

因此,本书的目标受众是有一定编程经验的程序员。我期望你有基本的 C 和 C++ 知识。我也期望你在使用 C++ 时遇到过问题、踩过坑,并希望本书能提供给你一些解决方案。

大部分的读者应该在通过其他渠道学过、用过 C++ 之后再来阅读本书;而如果你有扎实的 编程基础,但从来没用过 C++,也可以尝试一下直接上手本书。在 1 ,我描述了阅读本书需要的基础知识,也可以作为一个快速的知识复习吧。

本书内容按循序渐进、由浅入深的方式组织,因此推荐的阅读方式是从头到尾、按顺序阅读。在初次阅读时,你可以考虑跳过所有的脚注、插文、交叉引用,以及节标题尾部带上标星号(*)表示难度超出本章其他部分的内容。对于 C++ 老手,也许你会觉得需要跳过一些已经了解的章节,但此时你也有可能会漏掉一些有用的说明信息。因此,我建议对已经了解的内容也快速浏览一下。需要快速查找信息时,本书尾部的索引应该可以给你帮助。

本书编辑老师将这本书的特色总结为如下几条,供你参考:

不止于这本书

本书是我计划写作的 C++ 系列图书的第一本。这本书是关于“使用 C++”的,是基础,适合任何使用 C++ 进行开发的程序员。这本书的目的是告诉读者使用现代 C++ 的“正确”方式——换句话说,如何用好标准 C++ 提供的“制式武器”,高效地进行开发并避免一些常见的陷阱。

至少我还会写作第二本,主题是“扩展 C++”,算是高级课题,适合于使用 C++ 搭建项目的框架和公用工具的程序员和架构师。在这一本书中,我会讲解 C++ 的高级特性,通过讲解例子介绍 C++ 标准库和类似于 C++ 标准库的工具该如何搭建——换句话说,我们要在用好“制式武器”的基础之上,研究它们是如何打造的,并进一步打造适合特定项目的称手兵刃。

3. 关于我

提供一个比较官方的介绍吧。

吴咏炜

国内知名 C++ 专家、Boolan 首席技术咨询师,曾任英特尔亚太研发中心资深系统架构师,毕业于复旦大学物理系,拥有 30 年 C/C++ 系统级软件开发和架构经验。目前从事 C++ 相关的技术咨询和培训工作,为华为、大疆等多家公司提供过服务。工作涉及 C/C++ 语言、软件架构、安全软件开发、性能优化、代码重用、开源软件等多方面。

开源软件作品包括:mozi、nvwa、libunibreak 等。

专栏或者翻译作品包括:极客时间专栏《现代 C++ 编程实战》(累计学习人数超过 3.5 万人),图书翻译作品《编程大师访谈录》《C++ Core Guidelines 解析》,论文翻译作品《在纷繁多变的世界里茁壮成长:C++ 2006—2020》,等等。

4. 致谢

本书的初稿经过了一些朋友和 C++ 爱好者的审读,他们是:倪文卿(IceBear)、罗能(netcan)、冯畅、何荣华、李冠锋、琳哒 6、张德龙、杨凡、吴长盛、杨文波和杨红尘。我收到了各位宝贵的反馈意见,并修正了书中很多技术和文字问题。在此,谨向各位表示深深的谢意。特别鸣谢倪文卿,他给出了最详尽的反馈意见,还花了不少时间跟我讨论。

同时,感谢以下朋友给出的关于本书的专家书评。

这本书并没有长篇大论地罗列所有语言特性,而是在有限的篇幅里简明扼要地抓住现代C++ 的“主线”,选择那些“重要又常用”的语言特性,深入这些特性的“来龙去脉”,确保“好钢用在刀刃上”。我向每一位渴望掌握现代 C++ 的读者推荐本书。

——李建忠C++ 及系统软件技术大会主席

ISO 国际 C++ 标准委员会委员


作为一名日常工作使用 C++ 近六年的开发者,书中介绍的许多方法让我深有共鸣。本书的知识点兼具广度和深度,作者从实际应用场景出发,提供了众多最佳实践。它非常适合刚入门 C++ 以及希望进一步提升 C++ 技能的开发者。

——罗能,华为高级工程师,《C++20 高级编程》作者

我就是通过学习吴老师的《现代C++ 编程实战》专栏成长的——现在这本新书简直就是个“大礼包”——内容多到爆炸,比专栏还要精彩。书中对知识点的讲解都是干货,相信每位读者都能从中学到很多,收获满满。

——程序喵大人,资深 C++ 开发工程师

C++20 高级编程(第 5 版)》译者

我把这本新书推荐给仍在使用传统 C++ 的同行。作者以严谨而亲切的语言,在克制的篇幅里涵盖了实战现代 C++ 的核心要点。阅读中我多次感叹:“哦,现在可以这样了!”

——杨文波,资深嵌入式 C++ 程序员
C++ Templates(第 2 版)中文版》《C++ Core Guidelines 解析》译者

这是一本扎根实战的技术书,更是一本充满洞见的实用工具书,体现了吴老师对 C++ 语言的深刻理解与技术追求。希望本书能够帮助开发者在现代 C++ 复杂的技术生态中游刃有余,实现高效而优雅的编程。

——何荣华(墨梵),宝马自动驾驶软件专家

C++ Templates(第 2 版)中文版》《C++ Core Guidelines 解析》

C++20 高级编程(第 版)》译者

本书作者以其数十年的开发经验和深厚的理论功底,深入探讨了现代 C++ 的核心特性,同时,针对开发过程中常见的问题提供了切实可行的解决方案和最佳实践。本书实乃学习和进阶现代 C++ 的良师益友。

——雨乐,广告引擎高级技术专家

现代 C++ 语言历经多次修订,增添了不少新功能。刚接触的开发者往往感叹其卷帙浩繁,一时不知从何抓起。很高兴能看到此书问世,带领大家从实战出发,探寻相关概念要解决的问题及其背后的思想,从而更好地掌握 C++

——倪文卿(IceBear,知乎 C++ 答主

5. 关于图书的更多信息

你可能想了解一下关于图书的更多信息,比如目录、部分试读,等等,在此,展示一张目录图,方便大家查看:

(放大可查看大图)

你也可以前往图灵社区下载试读 PDF,PDF 中提供了完整的目录、章节试读(关于第 7 章“标准容器”的部分内容)

网址如下:https://www.ituring.com.cn/book/3410

或者点击文末左边的「阅读原文」,链接到图灵社区

6. 新书直播

1 月 7 日晚上 20:00,图灵八点半开年直播第一场,我们将邀请本书作者吴咏炜老师,来跟大家聊聊 C++ 的现状与未来,大家动动手指预约起来吧~

7.购买

点击这个链接,获得限时福利价格:

我感觉视图有点像数据库的视图,提供了一种访问数据的抽象方式,可以简化代码,提高代码的可维护性。不过,如果视图底层的数据结构发生变化,视图也可能会失效,需要注意这一点。

我觉得至少得掌握C++的基本语法吧,比如变量、数据类型、运算符、控制流语句等等。还有面向对象编程的概念也要了解,像类、对象、继承、多态这些。

移动语义解决了不必要的拷贝构造问题,特别是对于临时对象,可以大幅提升性能。以前为了避免深拷贝,经常需要使用指针,现在用移动语义就方便多了。

视图在处理字符串的时候也很方便,可以用来表示子字符串,而不用进行实际的复制操作。这样可以节省内存,提高程序效率,而且代码看起来也更简洁。

智能指针有效避免了内存泄漏的问题。以前用裸指针,经常忘记释放内存,或者重复释放,导致程序崩溃。现在用智能指针,就不用担心这些问题了。

关于“视图”的应用场景,我想到一个例子,就是处理大量数据的只读访问。比如,一个图像处理程序,如果只需要对一部分像素进行分析,就可以用视图来表示这部分像素,避免拷贝大量数据,提高效率。至于优势,我觉得代码可读性会更好,也更安全。劣势的话,可能需要一些学习成本。

现代C++ 的改进让代码更加简洁易懂,也更安全。比如,用range-based for循环遍历容器就比以前的迭代器方式更直观,也更不容易出错。Lambda表达式也让代码更简洁,提高了代码的可读性。

如果之前学过C语言,那上手C++会更容易一些。C++很多语法都跟C语言类似,可以直接迁移过来。不过C++的特性更多,需要花更多时间学习。

除了语法,我觉得指针的概念也很重要。C++中指针用得很多,如果对指针不理解,很容易出现内存错误。最好也了解一些常用的数据结构和算法,这样才能写出高效的代码。 当然,书里第一章也提到了预备知识,可以参考一下。