个人对c++语言的理解,猜测一下语言创造者的思想

c++语言被创造出来已经好几十年了,赞誉有之,批评有之。

它所蕴含的理念也有了各种各样的解读。

为什么c++会变得如此庞大,为什么会被设计成这样?

我个人也有一些思索,帮助初学者如何更好理解c++语言。


从历史上看,c语言的许多特效是为了方便编译器的设计者而建立的。
基于这种理念,c语言假定程序员完全知道自己在做什么,使用者对底层的实现细节了如指掌,保证自己的所作所为是正确的。

所以c语言没有数组越界检查,各种复杂奇怪的操作符写法,重复定义的操作符等等。

而c++显然部分继承了这个思想。
c++提供了非常多的功能,每个功能又包含众多细节,几乎被全世界抱怨难以学习。


我今天晚上突然想到:“c++的创始者多半是个军迷。”
当然,这是玩笑话。


但是用军事战争来类比,实在太恰当了。
士兵们要上战场了,c++的创始者可能经过了如下思索:


1.  首先要准备一把高精度的步枪,方便远距离杀敌。
2. 准备一把冲锋枪,方便中近距离压制敌人。
3. 准备一把手枪,弹夹容量不能太小,方便在危机时使用。
4. 准备工兵铲,可以挖战壕,以及用来肉搏。
5. 不要忘了准备手榴弹,对付躲起来的敌人很好用。
6. 还要携带RPG,否则在对付装甲目标时,会手足无措。
…………
…………


我们还可以写上更多的东西,比如防弹衣,单兵通讯设备等等。
最后看起来那个士兵象什么?

借用一个来自网络的图片:






c++庞大的体系正是这样的,它的创造思路实际上体现了一种选择权。
程序员(士兵)有足够多的选择,以应对不同的情况。


显而易见,一个菜鸟士兵,肯定不如一个老兵。
老兵能熟练掌握这些武器,并且知道在什么环境下,以何种方式使用它们。
从这个角度来说,c++没有任何错误,它避免了最糟糕的情况——士兵们只有手枪,却要去对付装甲目标,因为士兵们没有选择。
c++从来没有要求程序员,必须时刻背着“小山”一样庞大的武器战斗。


了解了这个,我们回过头来看 bjarne stroustrup 的话:“轻松使用这种语言,不要觉得必须使用所有的特性。”
而另一位创造者anderw koenig说:"编程中最困难的的部分不是去学习语言细节,而是理解问题的解决之道。面向对象仅仅是c++的手段之一,而不是全部。“


如果不分场合背着所有的武器装备,别说参加战斗了,连走路都困难。
还记得开头部分,c++部分继承了c
的思想么? 它假定程序员完全知道自己在做什么,并能恰当的使用。

听起来似乎是“推卸责任”,实际上真不是,它的设计思想就是如此。



最后总结: 

实际上使用不当者违背了剃刀原理:“如无必要,勿增实体”,如果你面对的问题不需要,那就不要去用。
而c++的创造者并没有违背:“提供更多选择,以应对不同的情况,非常有必要。”








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值