读书札记之 —— 《C++ 语言的设计和演化》

这本书讲述C++语言的设计和演化,可以让你对于C++的各种特性达到知其然更知其所以然的 境界。很遗憾,这本书没有读完,因为实在读不下去,原因是我比较作死的买了一本英文影 印版的旧书(目前市面上该书已经绝版),但是本贾尼的文法和用词习惯实在太过于高深, 我很艰难的读完了第一部分,却失去了读第二部分的勇气。以前太过自负了,以后读技术专 著有口碑不错的中文译本还是不要过于追求原滋原味的好。此外这本书是过年前几天开始阅 读,年后各种走亲访友,没有时间安心的看书,使得这本书的阅读过程断断续续的,最终也 就没有阅读下去的欲望了。

半本书的体会

这本书我虽然只是读了半本,但是还是有许多的感悟。其中最大的感悟是谢谢所有为创造 C++ 付出过努力的人,C++不像JAVA有强大的公司作为后盾,它的发展很长的一段时间都 只有本贾尼一个人在支撑着,很多人吐槽C++设计很糟糕,但是又有谁去仔细的想过这门语 言发展到现在,那些语言的设计者们在背后付出了多少的努力呢。

C++可以说是用户驱动型的语言,它随着时间不断的演化,不断的解决用户提出的问题,不 断的添加用户们想要的特性。它很核心的一个设计理念是不强迫用户使用某种单一的方式 去解决问题,很多人JAVA的使用者用怜悯的口吻说C++不是纯粹的面向对象,却永远不知 道C++从来就没有考虑郭纯粹的面向对象。语言的设计不是美学创作,C++的目标不是创造出 完美的语言而是提供目前可用的问题解决方式。这种方式也从来都不是单一的,用面向对象 (这里指虚函数)可以解决的很多问题,使用泛型也可以解决。C++提供各种特性以供用户 自己选择最佳的方式,比如为了效率的考虑只使用实体类(有的书上称为ADT或者 class-based),为了灵活性选择虚拟类。没有哪一种方式天生就优于另外一种方式,所以 C++提供了各种方式供你选择,所以在C++中会存在四种编程范式,这也是很多人吐槽这门语 言非常臃肿的一个原因。

不要把C语言的过错归结到C++中去,很多人吐槽说C++语言中的坑太多,其实很大一部 分的坑来自C语言,而不是C++的本身。C++在设计的时候很想填上C语言中原有的坑,但是为 了尽可能的兼容C语言,它保留了大部分C中原有的缺陷。关于这一点陈浩的《C++的坑真的 多吗》 一文有比较详细的讨论,建议大家阅读。C++为了改进C语言中的一些坑 其实做了很多努力,比如inline函数、namespaceconst 等等。