前不久看到这样一句话,说:C++程序员可以分成两类,读过C++程序设计语言中文的和没读过的——不知道你是属于哪类呢?
非常经典的C++书籍,基本上学C++的人没有不知道这本书的。书中介绍了55个准则,每一条准则描述一个编写出更好的C++的方式。
书是一年半以前买的,那时刚刚学了一个学期C++(再之前一个学期学了C),算是把基本语法学完了,封装继承多态等面向对象知识也都有所了解。不过那时买来这本书一读,还是觉得读起来太吃力了,就算勉强读完所能理解的也不多。所以看了1/5就束之高阁了。之后虽然几次想再拿出来读完,却都因为种种原因耽搁了。最近趁着寒假,终于把这么经典好书通读了一遍。
读完之后第一感觉就是:难!C++真难!以前的自己真是太浅薄了(虽然也从没认为自己多有内涵),对C++的理解真是太浅了(虽然也从没认为自己真的掌握好了C++)。书中很多观点都令我耳目一新:原来C++可以这么用的;而对C++的博大精深也有了更深刻了认识。
之前的一年基本上都在用C#这门语言,C++很少用到,有些生疏了。读书的时候也常常把书中提到的C++的一些用法和C#相比较。比较之后发现,C#不愧是C++的后辈,继承了C++的优良传统,而又新增了很多特性。而这些新增的特性如果想在C++中实现,很是要费一番功夫。
在C/C++中最令人痛苦/欣赏的就是指针了。用得好,代码简洁,程序执行效率高;用得不好,不仅容易出错,各种各样的用法也令人头痛不已。与指针相伴随的是资源管理的问题,一个new一个delete,就算是资深的程序员也不敢说自己的代码完全不会出问题。于是人们发明了智能指针,大大简化了这一方面的问题。而C#在这方面就进不了不少,垃圾回收机制解决了资源管理容易出错和内存泄漏等问题。程序员只管完成功能就行,麻烦的事情交给系统和语言机制来解决。当然事情都有两面性,系统提供的方案是普遍适用的,但在某些特殊领域,还是人工写代码来控制效率高一些。
有面向对象,必然有类的继承体系。C++ 中不支持“接口”(Interface)这个东西,于是人们用“类”(Class)来模拟。在融入virtual关键字以及一些相对(和C#直接的Interface关键字相比)复杂的技术之后,终于用类基本实现了接口的特性。读到这里不禁赞叹前人的智慧。
书中还提到了TR1和BOOST等程序库,他们和STL一起,大大的扩展了C++语言。我觉得,函数库的增加,使C++一下子变得比C优越了很多。
另外书中还有很多很多的一下技巧和提示,虽然由于经验不足还是有很多不能完全理解(尤其是泛型那里),但读完之后还是觉得对C++的理解深刻了很多。
获取:
http://www.shujuyr.com/500.html