Effective C++读后感精选10篇
《Effective C++》是一本由[美]Scott Meyers著作,电子工业出版社出版的简裝本图书,本书定价:58.00元,页数:297,文章吧小编精心整理的一些读者的读后感,希望对大家能有帮助。
《Effective C++》读后感(一):收获颇丰
早在读cpp primer的时候我就注意到了cpp中有很多的设计思路都非常的清奇,比如对于ctor, dtor ,copy ctor和assignment operator的重载,什么时候应该重载,什么时候应该delete这些函数。当时的我还特意自己总结了一下其中的规律,但是总觉得不得要领。所以当我看到effective c++上来就对这些问题进行了非常清晰的阐述的时候我就知道,我又买到了一本好书(虽然这本书的名气很大,但是还是眼见为实)。
接下来的每个章节都对我的编程规范和设计思路有了很多启发。这本书简单直接告诉我,什么只是能运行的代码,而什么是完备的,健壮的,漂亮的代码。(直接导致我在设计一个类的时候会思考更多的东西)
我一直认为一本好书会让读者没有隔离的感觉,就好像是大牛面对面手把手带你飞的感觉。而这本书就能给我这样的感觉。侯捷老师的翻译非常有味道,让我能够感受到作者在教授知识时的激情和幽默感。在读书的时候我必带一支笔,在自己觉得有意思,有作用的地方写下自己的一些理解和体会。所以除了知识部分,有很多作者开的小玩笑都被我发现并且写下了自己的吐槽(相信作者也能感受到,大洋彼岸有个学生和他在互动吧=。=)。这本书在行文有趣方面堪称是技术书籍的典范,从来不为了讲一个段子拖泥带水,也从不放过一个能够调侃一下的机会。
回归到内容本身。本书的55的条款绝对是字字珠玑,条条精辟。我认为这本书看了不应放在一旁,应当保证自己随时查看,偶尔复习,让这些条款烂熟于心,成为自己写cpp程序的规范。cpp博大精深,只有依靠多实践才能去掌握各种不同范式的优良用法。好在后面的路有了effective c++陪我一起走(不知道为啥就是想说这么肉麻一句话,哈哈哈哈!)
最后总结:这是本超五星好书,在我心中和cpp primer一个等级。
《Effective C++》读后感(二):从语言本身谈语言
对于C++,一直未窥门径。大学时就一直在学C++,却发现只是简单的蜻蜓点水。尤其对于C++中一些很重要的部分,如Template,STL,Exception机制等部分更是少有涉及。接着看了Lippman的C++ Primer,书很长确是详细完整的介绍了C++。但只是了解到了C++的一些机制,往往是从一种应该如何用的角度来审视。等到读Effective C++才会发现C++的博大精深。任何一个在Primer中很小的一点,可能都有着无穷的深意。而且一些原理和例子确实让人有豁然开朗的感觉。如果能够在设计编码中意识到这些问题,C++的功力必然更上一层楼。
但是,回过头来想,如果从C++语言之上来看所提到的这些Effective, 或是一些careless trap,这是否钻进了语言本身的圈套之中,却不自知?
《Effective C++》读后感(三):C++进阶必看
其实严格来说不到四天就看完了,中间有几天出去玩,放下没看。其实对于有了一定C++基础的程序员来说,看这本书就行读小说,加上Mayer把文章写的可读性很强,读起来如饮甘露,不得不说国内技术作者很少能做到这点。
作者对内容的编排基本上是按照程序员的进阶之路来写,由浅入深,先考虑最普通最常见的问题,然后逐步扩展到高级程序控制,这也导致我在读最后几章时有些吃力的原因,因为讨论的问题很少遇到,比如有些问题如模板元编程TMP常常是程序库开发者才会经常遇到的技术,但读完后还是感到收获不小,因为说不定你有天会去读这些库的原代码。
推荐必读的另一原因是接触到了新知识或者巩固了一些概念,如智能指针、traits Class、线程安全、t tr1、Boost、Strategy机制等,这些以前只是模糊的知道或根本没听说过,现在了解了为何存在和如何使用。
多说无益,快买来看吧,中文版翻译的不错。
《Effective C++》读后感(四):C++初学者谈几点体会
虽然多年前在本科课程中学过C++,但之后的几年里,C++主要被我用来进行简单的算法实现或者简单的学术仿真程序的编写,一直没有深入实践过“面向对象的C++”、“泛型的C++”。因此,自己还是一个彻头彻尾的C++初学者。这里从初学者的角度谈谈读了这本书以后对C++的几点新理解新体会。1,C++追求程序执行的效率,因而牺牲了一些编程开发的便利性。
书中好几个例子提到了这一点。比如,C++类中的方法都是默认non-virtual的。virtual函数会造成额外的开销,空间上要增加Virtual Table和指针,时间上需要通过函数指针查询正确的函数,增加了函数调用时间(条款7)。而Java中,则默认所有函数都是virtual的。又比如,函数的缺省参数值采用了静态绑定的方法,无需运行时动态决定,这就导致了如果在derived class覆盖了base class的缺省参数值,实际上是无法通过base class的指针使用覆盖后的缺省参数值的(条款37)。另外还有垃圾回收机制,很多现代的编程语言都支持,但是C++里却没有强制编译器实现垃圾回收功能。
2,C++允许程序员控制底层资源的操作,有灵活性也带来风险。
C++中争议最大的部分之一就是指针了,通过指针,程序员可以灵活的控制资源的使用,定制自己的new和delete(条款49-52),但是也带来了内存泄漏的风险(条款13)。书中很多内容,都涉及如何正确的维护资源。作者提倡用对象管理资源,例如使用智能指针,将资源用auto_ptr或者shared_ptr包装后,利用智能指针自动释放内存。
3,面向对象守则要求数据应该尽可能的封装。
public意味着不封装,不封装意味着不可改变。
通过对数据成员的隐藏,只暴露读写的接口,我们可以方便的实现各种访问控制,只读、只写、读写、无读写;同时也方便以后替换具体的计算细节(条款22)。
通过对成员函数的隐藏,在相同的namespace中以non-member代替member函数,提供对类进行操作的便利函数,可以更方便的扩展程序库(条款23)。
4,遵守面向对象设计的基本原则。
设计class犹如设计新type,首先必须要有充足的这个新class存在的理由(条款19)。另外class之间关系的设计要遵守基本的逻辑。例如,public继承意味着is-a的关系(条款32);通过复合关系塑模出has-a关系(条款38);通过private继承跟据已有的类实现出新类(条款39)。
区分要继承的是接口还是实现(条款34)。一般而言,pure virtual是提供继承的接口,non-pure virtual是为了提供缺省实现,而non-virtual则是给derived class的一份强制性实现。
虽然多重继承在很多地方不被提倡,书中也提供了一个合理的需要多重继承的逻辑的例子(条款49)。
5,时刻注意程序是否异常安全
一段平淡无奇的代码,粗看上去似乎逻辑正确,但是如果考虑到其中可能发生的异常,也许会完全颠覆你的世界观。异常常常来源于不成功的资源申请,遇到有new的地方就要想想如果new不成功会怎样。书中通过非常简练而精彩的例子讲解了一些保证异常安全性的方法(条款11,17)。
6,了解C++的template metaprogram
新的C++11应该对template metaprogram有更好的支持。本书中也提供了一个C++编译期计算阶乘的例子(条款48)。
最后总结一下,作为了解C++基本语法,但是缺乏实践经验的初学者,我觉得这本书还是很有阅读的价值的,能够加深自己对C++的理解,也看到真正要做到“精通”C++还有多少距离。
PS:C++11中,作者提到的Boost库中的很多理念已经被吸收到标准中了(条款55),C++11是一个更为强大,集合了各种编程范式,和老版相比大大降低了代码编写量的新标准。而作者也在准备针对C++11的新版,期待中。