今天是头一次聊 C++ 的书,当然要选一本够分量又实用的书。俺想了一炷香的功夫,决定先拿《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices 》开刀。
上次俺在《如何选择 IT 技术书籍》中已经介绍了几个鉴别好书的招数,现在可以验证一下。
先说说此书的作者 Herb Sutter 和 Andrei Alexandrescu。两位都是 C++ 社区的大牛。其中 Herb Sutter 是标准委员会的主席(光看头衔就知道有多牛了)。Andrei Alexandrescu 是《Modern C++ Design》的作者,大凡看过此书的人应该都会被他极具创新的 C++ 模板用法所震惊。鉴于两位作者的分量,大伙儿可以想见该书一定不差。
然后看看出版时间是2004年,在 C++ 98 和 C++ 03 标准之后,因此肯定已经涵盖了 C++ 语言新标准的东东。本书的出版社“Addison Wesley”也是国际知名。因此从“出版信息”看,这本书也符合要求。
再然后,看看目录。在本书之前,俺曾看过许多关于编码规范的书或者文章,但是都仅仅局限于语法层面。而这本书的出众之处在于用了很大的比重来介绍语法之外的条款(例如性能优化、类设计、STL 库的使用)。由此看来,本书可以适合不同层次的 C++ 开发人员,即使你是用 C++ 写了多年程序的老手也会从中获益。
啰嗦了一大堆好处(你估计看烦了),现在开始来具体介绍一下内容。全书的101个条款分布在如下的12部分中,下面来挨个介绍一下。(如果你已经通读过全书,后面内容你可以略过)
1、组织与策略
这部分其实不是讲 C++,而是更偏向于软件工程方面。如果你是一个部门或者团队的主管,要仔细思考一下:这些条款你的团队/部门是否都做到了?如果你是一个 C++ 新手,可以先略过这部分。
2、设计风格
这部分讲的是通用程序设计哲学,并不限于 C++,而是适用于所有的编程语言。如果你对 C++ 已经入门,但是想再上一个境界,本部分你必须好好领会。我估计有十年编程经验的老手也未必能够完全吃透该部分的所有条款。
3、编码风格
终于开始说到C++语法了!本部分说得都是一些基本的东东,C++ 新手要好好看看这部分,老手倒未必了。
4、函数与操作符(运算符)
如果你是从其它语言 Java 和 C 转到 C++,可能对操作符重载还不适应,需要了解一下这部分。如果你原来是 Python 程序员,估计对操作符重载,应该会比较有亲切感。
5、类设计和继承
最好你已经有了一定的 OOP 理论功底,然后再来看这部分,效果会更好。
6、构造、析构、拷贝
这部分读起来的难度不大。不过有几个几个细节需要注意(即使你已是熟手)。
7、名空间和模块
如果你需要从事规模比较大的 C++ 项目的开发,那么本部分一定要了解一下。比较大的项目一般都会涉及到逻辑分割(切分名空间)和物理分割(划分模块)。
8、模板与范型
这部分适合已经比较熟悉 C++ 的开发人员,新手可以先略过。
9、错误处理与异常
错误和异常的处理,是编程领域公认的难点。头几条是关于原理性的条款(因此也适用于其它语言),需要深刻领会;后几条是关于 C++ 语法,你如果对 try/catch 不熟悉的话要注意看看了(即使是2-3年开发经验的,也有许多不熟悉异常处理)。
10、STL 容器 & 11、STL 算法
如果你是从其它语言(Java、C)转到 C++,或者你原先只用MFC,那么估计你的 STL 会有欠缺,好好看看这两部分吧。
12、类型安全
如果你是从 C 转到 C++,这部分尤其要注意看一下。里面提到的几个条款都是和C的缺点有关(这么说,C 语言的 fans 看了可别动怒啊)。
听完俺滴介绍,感觉怎么样?想去弄一本来看看吗?
此书的电子版已经上传到网盘。想看的同学,请猛击“俺收藏的电子书目录”。
不得不说,这书我强烈建议看英文版的.中文版真是..
回复删除如果是新手最好就看effective c++,讲的详细很多..
因为我就是新手..
我现在在学C和学C++之间抉择,网上搜索的答案分歧太大。看后还是找不到答案。
回复删除.
我本来想学C++,因为很多人都说C++更为实用,但是看到C在编程语言排行中得了第一,C++才第四,我又难免动摇了。
.
在C和C++中,我不知道该怎样选择?希望博主可以解答一下……
TO 记忆め碎片
回复删除最好是先说说你学习编程语言的动机和目的,这样俺才能给出针对性的建议。
如果涉及到个人隐私的话,咱们也可以邮件讨论。
博主,你好。请问哪本资料可以帮助新手掌握C?本人大一。
删除TO Kartz 4楼1单元 的網友
删除沒有哪本書可以學完,進而掌握C Language Programming(“掌握”二字是形容個人對於編程語言的熟悉情況,而不是讀完/學完某一本書的結果;只能是:某本編程語言書寫得通俗易懂/易於上手實踐)。學習編程語言或成為軟件工程師,這是一個系統化、體系化、跨領域的事情/工程。
還有,以後畢業應聘時,求職簡歷,中文簡歷千萬不要寫精通C/C++。
这里的人都不用百度?
回复删除恭喜你猜对了。。。。
删除