“ C ++模板:完整指南”(c)2002 —是C ++ 11的最新版本?


10

C ++模板:完整指南》(c)2002 这本书对我来说似乎很有吸引力,但是由于它已经12岁了,我担心它可能已经过时了。一年前,有一些非常受好评的Amazon评论,而C ++模板上没有其他最新的标题。有谁知道2002年出版的关于模板的书(而不是专门关于STL的书)是否具有被C ++ 11取代或添加的语法或概念?

以下是来自Amazon的书籍描述

模板是C ++最强大的功能之一,但是它们常常被忽视,误解和滥用。C ++模板:《完整指南》使软件架构师和工程师清楚了解为什么,何时以及如何使用模板来更高效地构建和维护更清洁,更快,更智能的软件。

C ++模板从关于基础概念和语言功能的有见地的教程开始。本书的其余部分可作为全面参考,首先关注语言细节,然后关注多种编码技术,最后关注模板的高级应用程序。本书中使用的示例说明了抽象概念并演示了最佳实践。

读者学习

  • 模板的确切行为
  • 如何避免与模板相关的陷阱
  • 从基本到以前未记录的成语和技术
  • 如何在不威胁性能或安全的情况下重用源代码
  • 如何提高C ++程序的效率
  • 如何生产更灵活和可维护的软件

2
由于C ++语言本身变化缓慢(重大变化仅每10年进行一次)并且在很大程度上向后兼容,因此有关C ++的书籍也不会很快老化。
Bart van Ingen Schenau 2014年

Answers:


12

更新(2016/08/24)

推荐的文章重点介绍C ++ 11:

C ++的SFINAE概念简介:类成员的编译时自省(Jean Guegant)


几个月前作为C ++模板元编程的学习者,我仍然建议阅读本书。

它不包括C ++ 11,但是列出了有关编译器应如何处理模板代码的语法和C ++规范。本书涵盖了许多鲜为人知的角落,如果您需要大量使用C ++模板(无论是否涉及元编程),这些角落将变得至关重要。


C ++ 11中缺少的部分是:


有一种结构,您会在粘贴到Stackoverflow:的代码中看到很多std::enable_if。但是,实际上,由于一定义规则和SFINAE,我发现这很难使用。这就是为什么本书很重要的原因,因为它涵盖了基础知识。


如果您实际上在跨平台库中使用C ++模板,则需要在不同的编译器中测试代码。这是因为每个编译器对C ++规范的遵循程度都不同。一个可以很好地编译的代码可能会被另一个拒绝,并且接受它的编译器有时会违反规范。


这是我读这本书时的阅读笔记。希望对您有所帮助。

读书笔记-C ++模板-完整指南(2003)

  • 第2.5章-功能模板-摘要
    • 重载解析和最佳实践
  • 第3.3章-类模板的专业化
  • 第3.4章-部分专业化
    • 模糊性(ODR错误),以及解决方法。ODR =一定义规则
  • 第4.3章-非类型模板参数的限制
    • 示例:具有外部链接的字符串文字
  • 第5章和第6章-这两个章节令人非常沮丧。您可能想跳过它,然后在准备使用模板时返回。

  • 第二部分(Ch 8-Ch ???)高级内容部分。

  • 第8章-更多规则

    • 对于已经熟悉整个Ch 3(类模板-基础)的程序员,应在Ch 3之后立即阅读Ch 8.1和8.2,因为附加规则与基本规则同等重要且相关。这样可以减轻一些痛苦。
  • 第8.3.1章(第12版中的第106页)首次提及SFINAE。

  • 第8.3章-本节介绍了许多情况,在这些情况下,模板自变量替换会导致无意义的句法扩展(并因此变得无效,这反过来又需要SFINAE)。即使对于有经验的C ++程序员来说,本章也有陡峭的学习曲线。
  • 第11章-模板参数推导

    • Ch11包含一些人为设计的模板参数推导示例,这些示例对于理解某些人为设计的SFINAE应用程序是必需的。
  • 第12.4章起-部分类模板专门化。

    • 这涵盖了SFINAE应用程序中经常需要的内部机制。

第三部分(Ch 17-Ch ???)元编程。

  • 第17章-从介绍性功能编程开始。

  • 应用程式 A.3-详细定义规则(ODR)。


3
在C ++ 11之前的TMP讨论中存在的问题是,它不会涵盖constexpr所有内容,因此会推荐将TMP用于所有元编程,即使在constexpr函数和类型更适合的情况下也是如此。
Ben Voigt
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.