读《C++语言的设计和演化》有感

831 篇文章 16 订阅
51 篇文章 1 订阅
C++ Primer送人了,但是身边没有一本纸质的C++权威手册有时还是不方便,于是购买了C++之父的三本书——《C++程序设计语言》,《C++程序设计原理与实践》和《C++语言的设计和演化》。

第三本书是我比较喜欢的历史八卦+技术的,于是先读了。

这本书里Stroustrup倒是澄清了几个问题,似乎能解决长期以来大家的一些争论

1.C++之父对于C语言的贡献、
  许多人将C++中的“不优雅”归结于对C的兼容,C++大牛们的几本书对于C近乎偏见的态度……似乎C是C++最失败的子集。但在本书中,C++之父实际上讲的很清楚了,他对于C是极其欣赏的,对于C的能力完全的承认(实际上早期C++许多的工作是对于C的强化和净化,并把完全兼容C作为强制性要求)。Stroustrup对于C的抱怨主要来源于两个方面——在C++兼容C的过程中遇到了不少设计实现上的麻烦;以及守旧的K&R C程序员对Stroustrup的批评。Stroustrup经常用这样的论据证明他对于C语言的修改和净化是正确的——C89、C99中许多的改进正是从C++中所引进。应该说Stroustrup身为C++之父,但对于C语言的贡献同样不可埋没。K&R的C语言著作,实际上也是使用的C++兼容的C(Stroustrup原话,我一定程度表示怀疑……)。
   
2.一些对C的“偏见”的来源
  C++的书里经常出现“要用……,不要用……”之类的话,有些比较靠谱,属于Stroustrup在净化C的过程中的一些明智的措施,比如取消默认int,将fun()与fun(void)等同,变更K&R C的参数列表,有些感觉更偏重于他个人的Style。书中的一句话道出了真相,Stroustrup直言C++最大的竞争对手正是C,他的目的就是——C能做到的,我必须也能做到,而且要做的更好。正因为如此,Stroustrup才绞尽脑汁对于C中任何有可能造成麻烦的特性都做了处理,即便有些麻烦可以轻松避免,而这种做法很容易给人以“鸡蛋里挑骨头”的感觉。

3.对于程序效率和开发效率的侧重
  现如今普遍的说法是C++编程开发效率远重要于程序效率,持这种观点的动不动就让反对者们去用汇编——“你要效率,就用汇编吧”,且不说此种说法极其幼稚(关于汇编与C/C++效率的问题本文不赘述,只提一句,绝大部分人写的汇编程序效率是绝对不如C的),更重要的是完全不符合Stroustrup的本意。
  在讲述C++的演化时,Stroustrup多次强调C++的目标是“在保证效率与C语言相当的情况下,加强程序的组织性;能保证同样功能的程序,C++更短小”,这正是浅封装的核心思想,而不是现在某些人吹捧的过度设计——只要C++版本比结构高度优化的C版本源代码长(如果你的C程序有一长串if else和switch case,只能说明自己水平差),基本上就逃不出过度设计,事实上,现在的许多C++代码,如果用C改写,将会更短而不是更长!
  书中的许多例子证明C++和C实际上效率几乎相同,C++早期的一个设计瑕疵导致相对于c语言3%的性能损失Stroustrup都无法忍受!如果觉得Stroustrup说得不具体,那就看Lippman的《深入详解C++对象模型》,定量的测试了C++各种情况下的效率与C的对比。
  C++在其第二个版本中,引入了虚函数机制,这应该就是现代C++效率最大的瓶颈了。不要滥用虚函数,减少虚函数调用次数可明显增强效率,更不要按照java的方式去使用C++。当然,C/C++程序效率问题最大的原因仍是程序员的水平!
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值