DBGCOOL

debugging seems to be cool, doesn't it?

Browsing Posts in C++

C++ Network Programming, Volume I: Mastering Complexity with ACE and Patterns

Details

Name: C++ Network Programming, Volume I: Mastering Complexity with ACE and Patterns
Publisher: Addison-Wesley Professional
Release Date: December 20, 2001
Author: Douglas C. Schmidt, Stephen D. Huston

书名:C++网络编程 卷1:运用ACE和模式消除复杂性
出版社:华中科技大学出版社
出版日期:2003年12月(晚2年)
译者:於春景

Review

在没看这本书之前,就听说过ACE的大名,一直觉得是个挺神奇的框架。看了这本书之后,终于明白了ACE到底是什么了。ACE相对于我们传统的socket编程,就好比是MFC相对于传动的Win32 API。ACE是用C++重新封装了底层的API,不仅仅包括socket,也包括多线程、多进程。而且,还实现了自己的任务、消息机制,非常适合网络程序开发。

ACE可以适用于很多不同的系统,包括最常见的Windows和Linux系统。ACE里面运用了很多模式,而且这些模式是Design Patterns一书不曾介绍的,因为这些模式都是网络程序所特有的。

很奇怪的是,这本书中文版貌似只翻译了卷一,没有人翻译卷二。Google Trends了一下,发现ACE本身也不是很热的词汇。所以要问的是,大家在编写跨平台的网络程序时,使用的是什么框架呢?还是说,很少有人用C++编写跨平台的网络应用?

Efficient C++

Details

Name: Efficient C++: Performance Programming Techniques
Publisher: Addison-Wesley Professional
Release Date: November 13, 1999
Author: Dov Bulka, David Mayhew

书名:提高C++性能的编程技术
出版社: 清华大学出版社
出版日期:2003年6月(晚4年)
译者:常晓波 朱剑平

Review

这是我看过的第一本关于C++性能的书籍,里面用了大量的图示来对比不同情况的效率问题。
例如下图分别是array, vector, list, multilist在进行插入操作时的速度对比情况,可以让人非常清晰从量的角度感受效率问题。比如说在push_back的时候,list比vector慢,看了这本书你就知道到底慢多少了。

书中不仅提到了Lazy Construction这种非常基础的概念,也对多线程时各种锁的效率进行了对比,可谓是分析C++效率必备的书籍。这本书讲的问题虽然看起来很深,但实际上非常容易理解。无论是否有过相关经验的人读了这本书肯定都会有新的收获。

Effective STL

Details

Name: Effective STL – 50 Specific Ways to Improve Your Use of the Standard Template Library
Publisher: Addison-Wesley Professional
Release Date: June 16, 2001
Author: Scott Meyers

书名:Effective STL中文版 – 50条有效使用STL的经验
出版社:清华大学出版社
出版日期:2006年4月(晚5年)
译者:潘爱民 陈铭 邹开红

Review

这本书跟Efficient C++有些类似,都是讲效率的,但是却是从不同的角度。
Efficient C++是讲C++本身的效率,例如引入的类的构造函数和析构函数的效率,虚函数的效率等等。
Effective STL是着重讲STL模板的效率,例如在对list元素remove时,要用list自己的remove而不要用std::remove。对STL中的容器、算法进行了比较细致的分析,这些都Efficient C++中所没有提到的。

个人感觉是建议先Efficient C++,对C++整体的效率有个大致的了解,因为这些效率问题是更为普遍的。然后再看Effective STL,千万不要STL基础不牢就直接看Effective STL,否则会云里雾里的被STL这些细节所绊倒。

Effective C++

Details

Name: Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition)
Publisher: Addison-Wesley Professional
Release Date: May 22, 2005
Author: Scott Meyers

书名:Effective C++:改善程序技术与设计思维的55个有效做法(第三版)
出版社:电子工业出版社
出版日期:2006年7月(晚1年)
译者:侯捷

Review

说实话,这本书挺好的,但不大适合初学者,建议至少先看完C++ Primer再看这本书。这本书讲的都是C++中的一些技巧的东西,对于深入理解C++是很有好处的。但问题是,真正编程的时候,不可能把这些技巧都用上。用太多技巧了,不利于后期代码的维护,别人看着太辛苦。当然,如果整个团队都是牛人,都讲究技巧也就另当别论了。

C++ Primer

Details

Name: C++ Primer 3rd Edition
Publisher: Addison-Wesley Professional
Release Date: April 2, 1998
Author: Stanley B. Lippman, Josée Lajoie

书名:C++ Primer (3RD)中文版
出版社:中国电力出版社
出版日期:2005年2月(晚7年)
译者:潘爱民 张丽

Review

这么好的书,翻译的太晚了!比英文第三版原版晚了近7年,不过开心的是,作者潘爱民本科的时候是我的师兄,比我大了13届,南开数学系毕业的,怎么没听老师提起过呢,呵呵。

学习C++的人,C++ Primer、The C++ Programming Language、Thinking in C++这三本书如果一本都没有完整的看过,那算不上会C++。Thinking in C++是我的大学教材,我下一届的教材用的就是C++ Primer。

C++ Primer非常系统的从C++基本语法到基于过程的程序设计,到基于对象的程序设计,最后到面向对象的程序设计,面面俱到的讲解了C++几乎全部方面。尤其是对重载解析、模板定义中的名字解析等高级话题分析的很是透彻。这本书也涵盖了标准模板库中的常用模板,例子比较全。不足之处是,对模板部分特化、函数对象适配器等话题讲解的不够全面,几乎只是一带而过。

另外,中文版中有几处严重的翻译错误,例如:


#include "String.h"

int main() {
String flower;

// 设置flower
if ( flower == "lily" ) // ok
// ...
else
if( "tulip" == flower ) // 错误
// ...
}

中文版原文:“但是,声明非类成员的重载操作符也是可以的。非类成员的重载操作符对于main()中的比较而言是错误的。”
英文版原文:”Overloaded operators that are not class members are considered for the erroneous comparsion in main().”
正确的翻译应该是:“对于main()中错误的比较而言,应该考虑使用非类成员重载操作符。”

看完C++ Primer后还有一个感觉,就是C++ Primer中对于C的东西介绍的很少,几乎可以说是没有介绍。所以,为了更好的使用C++,完整的掌握C语言程序设计也是必须的。

该书第三版内容稍微有些陈旧,毕竟本书在1998年就发布了,建议看更新后的第4版。