自诞生以来,C++ 持续演进,走过了许多重要的里程碑,从"带类的 C"(C with Classes)到 newer 标准的崛起。从 1991 年到 2011 年,这门语言演进缓慢,演进的动力来自 STL 和 Boost 这样的库。然而,自 2011 年以来,得益于 C++11、C++14、C++17 以及即将到来的 C++20,许多特性被加入到标准中。最近,C++ 社区一直在推广使用较新的标准来实现现有代码库的现代化。Bartłomiej Filipek是 C++ 社区最活跃的博主之一,他致力于推广较新的标准。他写了一本关于 C++17 标准特性的优秀著作,以下是对他这本书的简要书评。务实的写作方式在计算机科学领域,有许多主要面向学生的学术书籍,也有主要面向在开发产品时需要解决实际问题建议的开发者的书籍。您通过编码来学习——确实,这本书很少有页面不含源代码,而且每个讲解都至少用一个代码示例来演示。这些代码示例格式精良、易读且整洁。

作者还提供了大量实用信息,例如每个特性的编译器支持情况。
从一开始就纵览全局:一般来说,要了解一本书的内容,我们可以看一下目录并读一读引言。然而,在许多情况下,这并不足以清楚理解这本书的目标。这本书的有趣之处在于,它有一个 4 页的"快速概览"部分,清楚地说明了全书的内容。揭秘新的语言特性:这本书几乎涵盖了所有新的 C++17 特性,并按章节分组。尽管有些特性难以理解,但 Bartłomiej Filipek 采用了"保持简单"的方式,每个特性都用简单的例子讲解得非常清楚——例如,在新模板特性章节,其中包括:
- 类模板的模板实参推导
- template<auto>
- 折叠表达式
- if constexpr——C++ 的编译期 if!
- 外加一些较小的细节改进和修复
您会对讲解的清晰度和代码示例印象深刻。每一位 C++ 开发者,即使是初学者,都能理解这些新特性的用途。揭秘新的标准库特性好消息是,标准库随着每个新标准不断演进,并加入了许多有趣的新特性。以下是书中涵盖的 C++17 标准库特性:
- 如何用 std::optional 表示可空类型。
- 什么是带标签的联合体(tagged union)?为什么我们需要 std::variant 这种类型安全的联合体?
- 如何用 std::any 表示任意类型。
- 如何使用 string_view 在不破坏应用的情况下提升性能。
- 标准库中新增了哪些字符串操作。
- 如何使用标准库处理文件系统。
- 什么是并行算法。
每个特性都通过大量代码示例进行了详细讲解。有趣的是,作者还谈到了性能和内存方面的考量,解释某个特性会如何影响性能和内存使用。
更多示例与用例在书的结尾,作者提出了几个其他有趣的问题;作者尝试给出多种解决方案,并解释新标准如何比旧特性更好地解决它们。结论:读这本书时可以明显看出,作者是一位在许多 C++ 项目中解决过实际问题的程序员,这解释了这本书务实的写作方式。我们向每一位想要掌握 C++17 新标准的开发者推荐这本书。该书在 Leanpub 上有售,作为我们博客的读者,您可以使用以下优惠券链接以约八五折的价格购买:https://leanpub.com/cpp17indetail/c/codergears
