写点什么

阅读者 (四):C++ 必知必会

  • 2011-01-20
  • 本文字数:1339 字

    阅读完需:约 4 分钟

【编者按】一本编程语言的好书,倘若能经受住时间的考验成为经典,那么它的作者必然是在这门语言浸淫多年达至炉火纯青地步的专家级人物。《C++ 必知必会》的作者 Stephen C. Dewhurst 是贝尔实验室最早的 C++ 程序员之一,有着 20 多年的 C++ 应用经验。他的履历与经验足以让读者心生信赖。然而,好的程序员不一定能写出好书。Stephen 是 C/C++ User Journal 的资深编辑,并担任了 C++ Report 的专栏作家,这就足够保证本书的写作质量。


这不是一本新书,之所以这样说,一是因为这已经是本书的第二版,二是因为本书的形式和内容与《Effective C++》《More Effective C++》等系列存在着某种千丝万缕的联系。

我读了很多“条款 1,2,3”式的 C++ 指导书,包括《C++ 必知必会》第一版在内,觉得受益匪浅。不过,是在我具备了一定的 C++ 开发经验之后重温这些书籍时才有收获的感觉。所以,虽然这本书的名字叫“必知必会 (Common Knowledge)”,看起来像是一本基础入门书,但是我不想推荐给初涉 C++ 的朋友阅读,我认为它更适合对 C++ 有过一些开发经验的人士阅读,一方面大家能够从书中体会到新鲜的知识并加以实践,另一方面能够巩固和理解已经熟悉的编程技巧。

本书的全部内容是 63 条 C++ 编程经验和技巧,基于作者 Stephen C. Dewhurst 在主持《C++ Report》专栏的内容整理而成,这 63 条内容涉及了 C++ 语言的方方面面,从指针定义到抽象基类,从设计模式到泛型算法,而且内容难易有别,请大家注意:本书的内容不是由易及难的条款清单,所以看书时不必拘泥于“顺序”,选取感兴趣的条款阅读即可。

具体到各个条款上,有些内容属于比较基础的编程经验,如:

● 5. 引用是别名而非指针
● 6. 数组形参
● 21. 重载与重写并不相同
● 24. 成员函数查找
● 28. 指针比较的含义 而有一些条款,可能需要慢慢体会,比如:
● 35. placement new
● 40. RAII(资源获取即初始化)
● 47. 模板局部特化
● 55. 模板的模板参数

借用“2/8 法则”,20% 的基础条款足够让 C++ 开发人员在工作中更进一步了,剩下 80% 的条款也许等大家在需要高级技巧时再看也不迟。毕竟,不是每一位开发人员都有机会在实际工作当中设计、开发一套模板库并在 operator new 上精益求精。

这本书中,我最喜欢的部分是有关“异常安全”的经验,因为异常安全处理在编程语言中,看似细枝末节实则关系重大,见微知著。这些经验是 C++ 语言标准规范和开发社区融合而来的产物,值得学习,比如:

● 38. 异常安全公理 > 1. 异常是同步的,并且只能发生在函数调用的边界。因此,诸如预定义类型的算术操作、预定义类型(尤其是指针)的赋值以及其他底层操作不会导致异常发生(它们可能会导致产生某种信号或中断,但这些东西不是异常)。

  1. 对象的销毁是异常安全的。该公理并非建立于技术基础之上,而是建立于 C++ 开发社区共识基础之上。按照惯例,析构函数、operator delete 以及 operator delete[ ] 不会抛出异常。
  2. 交换操作不会抛出异常。这同样是一个建立于 C++ 社区共识之上的公理,但他的公认度不如“禁止在析构函数中和销毁对象时抛出异常”那样来的广泛。乍看上去,交换(swap)不是一个太常见的操作,但是幕后它的使用很广泛,尤其在 STL 的实现中。

最后,推荐那些想深入提高 C++ 开发技巧的朋友看一下这本《C++ 必知必会》第二版中译本。

2011-01-20 16:003899
用户头像

发布了 501 篇内容, 共 277.9 次阅读, 收获喜欢 63 次。

关注

评论

发布
暂无评论
发现更多内容

2021最新华为面经分享:Java高分面试指南(25分类1000题50w字解析)

比伯

Java 编程 架构 面试 计算机

LeetCode题解:121. 买卖股票的最佳时机,JavaScript,动态规划,详细注释

Lee Chen

算法 大前端 LeetCode

Linux之旅 - 行程介绍

诚义舅

bash Linux Shell

诊所数字化:实施私域,诊所店员的赋能路径

boshi

数字化医疗 私域运营 七日更 28天写作

Linux之旅 - 自序

诚义舅

bash Linux Shell

Linux之旅 - 入⻔命令集

诚义舅

bash Linux 运维 Shell

架构设计篇之微服务实战笔记(八)

小诚信驿站

架构 刘晓成 小诚信驿站 28天写作

2021年金三银四Java面试突击大全,吃透这套Java真题合集,突破BAT面试官这道“防线”

Java 架构 面试

第五周笔记

Ashley.

2.1 Go语言从入门到精通:Go语言基础语法

xcbeyond

28天写作 基础语法 Go 语言

安卓开发环境!一份字节跳动面试官给你的Android技术面试指南,终获offer

欢喜学安卓

android 程序员 面试 移动开发

开发者的福音,go也支持linq了

happlyfox

学习 28天写作 2月春节不断更 Go 语言

第五周 第二课笔记

Geek_娴子

边缘计算云原生开源方案选型比较

远鹏

Kubernetes 边缘计算 kubeedge openyurt superedge

Elasticsearch Doc Values 和 doc_values

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试 2月春节不断更

2021最全iOS面试题及底层视频分享专栏

ios 面试 音视频 iOS底层 iOS逆向

“他者”德意志(二):“走稳路”的德国半导体

脑极体

备战金三银四必备:2021最新Java面试汇总(附答案解析)

比伯

Java 编程 架构 面试 计算机

Linux之旅 - 入⻔命令集 - 文件管理(1/2)

诚义舅

bash Linux Shell linux命令

Newbe.Claptrap 框架入门,第一步 —— 开发环境准备

newbe36524

Docker 云计算 分布式 微服务 .net core

第五周 第一课笔记

Geek_娴子

第五周作业

Ashley.

可能是Java Stream的最佳实践(三)

ES_her0

28天写作

现在写还来得及吗?

Nydia

Newbe.Claptrap 框架入门,第二步 —— 创建项目

newbe36524

Docker 云计算 分布式 微服务 .net core

成为阿里P7移动架构师到底有多难?带你快速通过字节跳动面试,讲的明明白白!

欢喜学安卓

android 程序员 面试 移动开发

《华为技术认证HCNA网络技术实验指南》参考配置Ⅰ

依旧廖凯

华为 网络 交换机

Selenium 项目代码的优化与重构之路,滚雪球学 Python 番外篇

梦想橡皮擦

Python 28天写作 2月春节不断更

【LeetCode】至少有K个重复字符的最长子串Java题解

Albert

算法 LeetCode 28天写作 2月春节不断更

状态图与概念模型

克比

翻译:《实用的Python编程》03_00_Overview

codists

Python

阅读者(四):C++必知必会_Java_崔康_InfoQ精选文章