C++实战:核心技术与最佳实践——深度解读与学习指南

C++专家吴咏炜新作《C++实战》发布!聚焦现代C++核心技术与最佳实践,助你快速提升开发技能。

原文标题:推荐这本书

原文作者:图灵编辑部

冷月清谈:

《C++实战:核心技术与最佳实践》由C++领域专家吴咏炜老师撰写,旨在帮助C++开发者快速掌握现代C++的核心技术和最佳实践。本书并非系统描述所有C++特性,而是聚焦实战,从代码和使用场景出发讲解,特别关注高频使用的语言特性和惯用法,并提供实际应用场景下的解决方案。

本书涵盖了C++98/11/14/17/20/23等多个版本的核心内容,包括对象生存期和RAII、移动语义、模板、STL、视图、智能指针、并发编程、异步编程、错误处理等重要主题。作者以其30年的C/C++开发经验,深入浅出地讲解了这些特性,并结合实际案例进行分析,使读者能够更好地理解和应用。

本书适合有一定编程经验的程序员,特别是那些已经学过或用过C++,并希望进一步提升技能的开发者。即使你只有扎实的C语言基础,也可以尝试阅读本书。书中内容循序渐进,建议按顺序阅读。

怜星夜思:

1、书中提到的“视图”是什么概念?在实际项目中有哪些应用场景?
2、如何选择合适的错误处理方式?书中提到的契约、异常和不使用异常的方法,各自有什么优缺点?
3、现代C++的并发编程和异步编程有什么区别和联系?实际应用中该如何选择?

原文内容

2025 年伊始,特别想把这本新书推荐给大家——

吴咏炜老师的作品《C++实战:核心技术与最佳实践》
这本书的封面上是个狮子头,绰号“狮子书”:
狮子书刚出版不久,在预售阶段就多次荣登京东计算机新书榜一的位置:
已经拿到手的读者对这本书的评价也不错:
看到这里,先给认识吴老师的同学来个链接
直接下单,64.9 包邮
其他朋友,可以继续阅读,更多地了解一下这本书。
为何推荐?
关注一本新书,要先看看作者。《C++实战》一书的作者吴咏炜老师在 C/C++ 领域探索超过 30 年,是领域内知名的 C++ 专家。已有好些年,吴老师每年都会在 C++ 大会上进行演讲,介绍 C++ 方面的知识。在 2019 年,吴老师开始在“极客时间”上开设专栏,专门介绍现代 C++  的一些知识点。在随后的几年里,吴老师也做了不少 C++ 方面的培训和技术咨询工作。
狮子书是吴老师对自己 C++ 认知的系统总结,旨在让后来者少走弯路。这种聚焦实战和纯粹实用角度出发的图书是市面上的 C++ 图书中是比较少见的,而且,这本书不厚,吴老师写作的过程中特别注意极简化,最终成书只有 344 页。
看看这本书讲解的核心内容吧——都是大家需要解决的痛点与难点知识。
  • 对象生存期和RAII(C++最重要的特性)

  • 移动语义(现代C++最重要的新特性,全面影响代码组织)

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

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

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

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

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

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

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

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

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

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


简单总结下这本书的特色
1.现代 C++ 主线
含 C++98/11/14/17/20/23,适合初中级开发者
2.作者背景深厚
专研 C++ 编程 30 年,助你突破 C++ 痛点与难点
3.关注核心特性
聚焦高频使用的语言特性,重点讲解语言惯用法
4.面向实战开发
针对实际应用场景下的常见问题,提供解决方案
5.讲解通俗易懂
多图多表多代码,内容简单易读,代码方便实现
适合哪些读者学习?

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

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

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

本书内容按循序渐进、由浅入深的方式组织,因此推荐的阅读方式是从头到尾、按顺序阅读。

关于作者
吴咏炜

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

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

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

图书目录

专家书评
通过以下文字了解一下业内专家如何评价这本书~ 

这本书并没有长篇大论地罗列所有语言特性,而是在有限的篇幅里简明扼要地抓住现代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 高级编程(第 5 版)》译者

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

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

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

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

————————

最后,再强调下,如果你是一位工作 3~5 年的程序员,迫切想提升自己的 C++ 开发技能,那我把这本聚焦 C++ 核心特性在实际开发中用法的图书推荐给你,点击链接可以直接购买:
64.9 包邮,立刻带走!

对于错误处理,我觉得最重要的还是保持一致性,在项目中选择一种主要的方式,并坚持使用。

选择哪种错误处理方式要看具体情况,异常处理的开销比较大,但可以提供更丰富的上下文信息。契约式设计则更偏向于在编译期或运行初期发现错误。

选择并发还是异步编程,要看具体的应用场景。如果任务之间有依赖关系,可能更适合使用并发编程;如果任务之间相互独立,则可以考虑异步编程。

视图在一些场景下可以提升代码的可读性和效率,例如ranges库中的一些视图可以用来链式操作,对数据进行转换和过滤。不过也要注意视图的惰性求值特性,避免一些性能陷阱。

“视图”可以理解为一种提供对数据序列的访问方式,但不拥有数据本身。有点像数据库的视图,或者C++中的迭代器范围。它可以用于简化代码,避免不必要的数据拷贝,例如对部分数据进行排序或过滤。

关于错误处理,我推荐看看Herb Sutter的Exceptional C++系列,可以帮助你更深入地理解各种方式的优缺点。

关于视图,我推荐看看 range-v3 库,可以帮助你更好地理解和使用视图。

并发编程强调的是多个任务同时执行,而异步编程更关注的是非阻塞操作,提高程序的响应能力。它们可以结合使用,例如使用异步操作来实现并发任务。

并发和异步编程都比较复杂,我建议先学习一些基础概念,例如线程、锁、future、promise等,再结合实际项目进行练习。