具体描述
C++是一门大型复杂的语言,全面掌握绝非易事。但是,如果程序员希望从事专业开发工作,那么有些概念和技术是必须具备的。本书正是针对这一目的而撰写的。在书中,资深C++专家Stephen C. Dewhurst从业界多年来积累的宝贵经验中萃取了C++开发所应必备但常常被误解的知识,并在阐述时过滤掉了不必要的复杂性。你从何时(或者哪里)开始学习C++并不重要,但在迈出下一步之前,使用本书作为指南,可以确保轻松上阵!
本书为以下人士准备。
□不是一个初学者,并且需要迅速从中级C++迈向高级C++。
□已经具备一些C++编程经验,但在阅读中级和高级C++图书时动力不足,进展缓慢。
□已经听过一门介绍性的C++课程,但是发现当同事描述其C++设计和代码时,仍然不明就里。
□经验丰富的C或Java程序员,但还不具备有微妙差别的C++编程和设计的经验。
□C++专家,并且正在寻找一个“代言人”来回答那些经验欠缺的同事一再提出的同样问题。
作者简介
Stephen C. Dewhurst 贝尔实验室最早的C++程序员之一。有着20多年的C++应用经验,设计的应用领域包括编译器设计、安全交易、电子商务以及嵌入式电信产品等。Stephen是The C++ Source顾问委员会的成员之一,是C/C++ User Journal的资深编辑,并担任C++ Report的专栏作家。他还是两款C++编译器的作者,曾发表过大量关于编译器设计和C++编程技术的文章。
目录信息
条款2 多态 2
条款3 设计模式 5
条款4 STL 8
条款5 引用是别名而非指针 10
条款6 数组形参 13
条款7 常量指针与指向常量的指针 16
条款8 指向指针的指针 19
条款9 新式转型操作符 21
条款10 常量成员函数的含义 25
条款11 编译器会在类中放东西 29
条款12 赋值和初始化并不相同 31
条款13 复制操作 34
条款14 函数指针 37
条款15 指向类成员的指针并非指针 40
条款16 指向成员函数的指针并非指针 43
条款17 处理函数和数组声明 46
条款18 函数对象 48
条款19 Command模式与好莱坞法则 52
条款20 STL函数对象 55
条款21 重载与重写并不相同 58
条款22 Template Method模式 60
条款23 名字空间 62
条款24 成员函数查找 66
条款25 实参相依的查找 68
条款26 操作符函数查找 70
条款27 能力查询 72
条款28 指针比较的含义 75
条款29 虚构造函数与Prototype模式 77
条款30 Factory Method模式 79
条款31 协变返回类型 82
条款32 禁止复制 85
条款33 制造抽象基类 86
条款34 禁止或强制使用堆分配 88
条款35 placement new 90
条款36 特定于类的内存管理 93
条款37 数组分配 97
条款38 异常安全公理 100
条款39 异常安全的函数 103
条款40 RAII 106
条款41 new、构造函数和异常 110
条款42 智能指针 112
条款43 auto_ptr非同寻常 114
条款44 指针算术 116
条款45 模板术语 119
条款46 类模板显式特化 121
条款47 模板局部特化 125
条款48 类模板成员特化 129
条款49 利用typename消除歧义 132
条款50 成员模板 136
条款51 采用template消除歧义 140
条款52 针对类型信息的特化 142
条款53 嵌入的类型信息 146
条款54 traits 149
条款55 模板的模板参数 154
条款56 policy 159
条款57 模板实参推导 163
条款58 重载函数模板 167
条款59 SFINAE 169
条款60 泛型算法 172
条款61 只实例化要用的东西 176
条款62 包含哨位 179
条款63 可选的关键字 181
参考文献 184
索引 185
代码示例索引 195
· · · · · · (收起)
读后感
本书的定位是一本中阶C++书籍,作者也是按这个思路去写的,所以每个item都很短,不超过两三页。但是作者太过贪心了,在这本不到两百页的技术书籍中写了63个item,囊括了C++的语言特性、设计模式、模板进阶使用等。设计模式和C++模版不是三言两语就可以讲明白的,除非你已经对这...
这本书与《Effective C++》属于同一类型,但二者的内容重合度不高,而且我认为比Effective C++更值得一读。原因是Effective C++更偏重C++语言的特点;而本书更偏重于多数程序员的日常开发,包含了一些设计思想。读本书可以感觉到作者是厚积薄发型的,本书虽然是面向初学者,但...
本书的定位是一本中阶C++书籍,作者也是按这个思路去写的,所以每个item都很短,不超过两三页。但是作者太过贪心了,在这本不到两百页的技术书籍中写了63个item,囊括了C++的语言特性、设计模式、模板进阶使用等。设计模式和C++模版不是三言两语就可以讲明白的,除非你已经对这...
这本书与《Effective C++》属于同一类型,但二者的内容重合度不高,而且我认为比Effective C++更值得一读。原因是Effective C++更偏重C++语言的特点;而本书更偏重于多数程序员的日常开发,包含了一些设计思想。读本书可以感觉到作者是厚积薄发型的,本书虽然是面向初学者,但...
这本书与《Effective C++》属于同一类型,但二者的内容重合度不高,而且我认为比Effective C++更值得一读。原因是Effective C++更偏重C++语言的特点;而本书更偏重于多数程序员的日常开发,包含了一些设计思想。读本书可以感觉到作者是厚积薄发型的,本书虽然是面向初学者,但...
用户评价
拿到这本《C++必知必会》的时候,我本来是抱着挺高的期待的,毕竟书名听起来就很有“干货”的感觉。然而,翻开目录才发现,这本书的内容似乎更侧重于对C++基础语法和一些相对入门级概念的罗列,对于我这种已经接触过一段时间C++,希望在内存管理、并发编程或者模板元编程等高级领域有所提升的读者来说,这本书的深度明显不够。我原本希望能看到一些关于现代C++特性(比如C++17、C++20的新特性及其最佳实践)的深入剖析,或者是在特定场景下如何优化C++代码性能的实战案例。但很遗憾,书里更多的是对指针、引用、类和对象这些基础概念的重复讲解,语言风格也比较平铺直叙,缺乏那种让人眼前一亮的洞察力。读起来感觉像是在回顾大学时期的教材,对于提升实战能力帮助有限,更像是一本“C++入门速查手册”而不是一本“必知必会”的进阶指南。如果读者是完全没有接触过C++的新手,或许这本书能提供一个尚可的起点,但对于有一定经验的人来说,可能会觉得内容过于浅显,无法满足对“必会”二字的期望。整体而言,内容组织缺乏新意,深度上未能达到预期。
我尝试去书中寻找关于C++标准库(STL)的深度解析,希望能了解各个容器和算法背后的实现细节及其性能考量。然而,这本书对STL的介绍停留在“这个容器能做什么”的层面,比如`std::vector`比`std::list`在随机访问上更快,但它没有深入探讨这些差异背后的内存布局、缓存命中率等底层原因。同样,对于并发编程的支持,书中几乎没有涉及`std::thread`、`std::mutex`、`std::future`等现代并发工具的使用,这对于现今多核处理器环境下的软件开发来说,是一个巨大的遗漏。我感觉这本书的作者可能在撰写时,很大程度上参考了非常早期的C++标准,导致其内容在很大程度上脱离了当前业界的主流实践和技术栈。如果要用一个词来形容这本书在技术深度上的体现,那就是“蜻蜓点水”,它触及了许多主题,但没有一个主题能够真正沉下去,给读者留下深刻且实用的知识点。
从叙述风格上来看,这本书的逻辑跳转略显生硬,缺乏流畅的过渡,读起来总有一种断裂感。很多章节的引入像是硬生生地把知识点堆砌在一起,没有清晰的上下文或者应用场景来驱动学习的欲望。例如,在讲解模板时,它可能先用了几页纸解释了函数模板和类模板的语法,然后突然转到了复杂的多继承的陷阱,中间缺乏一个将这两者有机结合的示例项目或者思考路径。我更喜欢那种通过一个小型项目驱动,然后逐步引入新概念,并在实践中深化理解的教学方式。这本书的结构更像是参考手册的碎片化集合,而非一本结构严谨的教程。它更像是把一本本零散的技术笔记汇编成册,而不是经过精心设计的教学蓝图。因此,对于自学能力较弱的读者,很可能会在阅读过程中感到迷茫,不知道这些知识点究竟应该在何时、何地应用。
更让我感到困惑的是,虽然书名强调“必知必会”,但书中对一些非常基础但容易混淆的概念,比如值语义和引用语义的区别,或者是左值和右值的细微差异,讲解得过于笼统,没有给出足够的对比和反例来加深读者的理解。我发现自己不得不反复回溯前面的章节,才能勉强搞清楚某些高级特性的前提条件。此外,书中对于如何使用编译器(比如GCC或Clang)的特定警告选项来提前发现潜在错误这一“必会”的工程技巧也只是一笔带过,没有详细说明哪些警告标志是最关键的,或者如何配置编译环境以达到最佳的静态分析效果。总而言之,这本书更像是一个知识点的列表,而非一个深入的、能够培养程序员思维的工具。它告诉你“是什么”,但没有足够有力地告诉你“为什么是这样”以及“在实际中应该如何做”,这一点距离一本真正具有指导意义的编程书籍还有相当长的距离。
这本书的排版和章节划分给了我一种非常陈旧的感觉,就好像是十年前出版的编程书籍。首先,在代码示例方面,书里大量使用了传统的C++风格,比如大量的裸指针操作和较少使用现代C++中推荐的智能指针和`auto`关键字。这在一定程度上会误导初学者,让他们认为老旧的编程范式依然是主流,这在如今注重安全性和可读性的开发环境中是不可取的。此外,书中对异常处理和RAII(资源获取即初始化)的设计模式探讨得相当肤浅,只是简单地提了一下概念,并没有结合实际项目给出如何构建健壮的C++程序的详细指导。我期待的是,一本自称“必知必会”的书,至少要在现代C++的实践标准上有所建树,而不是停留在“能跑起来”的层面上。阅读过程中,我时常需要自己查阅最新的标准文档来验证书中的某些“最佳实践”,这无疑大大降低了阅读的效率和体验。对于追求代码质量和工程实践的开发者来说,这本书在这一点上的缺失是致命的。
书不错,是检验C++功底的好书。
一本C++使用规则手册,篇幅简短但不精炼,远不effective/exceptional系列,且内容与其他书籍重复,不看也罢
适合有c++基础的人,书很薄,内容很精练,行文风格有趣,建议不要一口气读完,最好一天看一个条款,跟着代码一起验证,每看一个新条款之前,回忆一下上一个条款,最后涉及模版的条款,个人读起来比较费劲,可能平时对模版使用的比较少
基本上算我读得最快的C++的书了,很多东西以前看的书里都说过了...
适合有c++基础的人,书很薄,内容很精练,行文风格有趣,建议不要一口气读完,最好一天看一个条款,跟着代码一起验证,每看一个新条款之前,回忆一下上一个条款,最后涉及模版的条款,个人读起来比较费劲,可能平时对模版使用的比较少