您的位置:首页 > 编程语言 > C语言/C++

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

2016-08-13 04:29 295 查看
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++的创造者并没有违背:“提供更多选择,以应对不同的情况,非常有必要。”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐