看流星社区

 找回密码
 注册账号
查看: 1666|回复: 0

初学C++语言感受

[复制链接]

该用户从未签到

发表于 2014-6-26 08:27:17 | 显示全部楼层 |阅读模式
对第一次接触到C++语言的用户和学者来说,了解C++语言的概念是非常重要的,那么就先说一下什么是C++语言,所谓C++语言:是一种使用非常广泛的计算机编程语言。。。

实际上,不管是在各大国内论坛上,还是在comp.lang.c++.moderated这样的国际C++论坛上,乃至于在douban上的小组内,有心者都会发现,对C++语言的细节的关注一直都没有停止过,同样,对C++语言的细节的抱怨也从来都没有停止过。

一个例子就是comp.lang.c++.moderated上的一个技术牛人James Kanze说的,他说接触C++十年了,到现在还需要不时去翻C++标准。这就难怪Eric Raymond老大在《The Art of Unix Programming》中说“C++是反紧凑”的了。C++中的细节太多,就算都看过了,也不可能都记住。更关键的是,就算都记住了,也不能让你成为一个真正的好程序员。

绝大多数人都把细节太多(或者用贬义词来说就是“阴暗角落太多”)归结为C++的本质问题,认为一切邪恶由此而生。也正因此,大约9月份的时候,Linus在邮件列表上说“C++是一门有思想包袱的语言;仅仅是为了让程序员远离C++,我也要用C”。

这句短短的话在国内引起了很大的反应,最初是刘江转了Linus的话,然后云风和孟岩都发表了自己的看法;我也写了一篇“Why C++”(后来发给Bjarne,Bjarne对这篇文章做了一个友情评注)。

然而,这一通浑水搅过之后,我相信引起的变化未必很大。大多数原先的反对者能从中找出反对的理由,于是更加反对;大多数原先的赞同者也能从中找到赞同的理由,于是更加赞同;而剩下来的原先没有明确意见的,看双方各有各的道理,可能还是没有头绪。

显然,如果找不出要学习C++语言的理由,那么谈什么“正确的学习方法”等于是废话。

首先重复一句Bjarne的话:“我们的系统已经是极度复杂的了,为了避开C++语言的复杂性而干脆不用C++(Linus的做法),无异于因噎废食。”在所有可用C和C++的领域,C++都是比C更好的语言。

当我说“更好的”时候,我说的是C++拥有比C更安全的类型检查、更好的抽象机制、更优秀的库。当然,凡事都有例外,如果你做的项目1)不大。2)编码中用不到什么抽象机制,甚至ADT(抽象数据类型,例如std::complex这种不含多态和继承的)也用不到,RAII也用不到,异常也用不到。

你连基础库(如,简化资源管理的智能指针、智能容器)都用不着。那么也许你用C的确没问题;所以如果你的情况如此,不用和我争论,因为我无法反驳你。我们这里说的领域大致是Bjarne在“C++应用列表”里面列出来的那些地方。

底线是:如果把C++中的诸多不必要的复杂性去掉,留下那些本质的,重要的语言特性,简化语言模型,消除历史包袱。即便是C++的反对者也许也很难找到理由说“我还是不用C++”。在我看来,一个真正从实践意义上理性反对使用C++的人只有一个理由:C++的复杂性带来的混乱抵消乃至超过了C++的抽象机制和库(在他的特定项目中)带来的好处。

值得注意的是,这里需要避免一个陷阱,就是一旦人们认定了“C++不好”,那么这个理由就会“长出自己的脚来”,即,就算我们拿掉C++的复杂性,他们可能也会坚持还是不用C++,并为之找一堆理由。我假定你不是这样的人。不过,也许最可能的是他会说:“问题是我们今天用的C++并非如此(简洁),你的假设不成立。”是的,我的假设不成立。但虽然我们无法消除复杂性,我们实际上是可以容易地避开复杂性,避短扬长的。这也是本文的要点,容我后面再详述。

当然,到现在你可能还是会说。我还是不用C++语言,因为我可以用D;或者如果你本来做的项目就不需要C++,你则可能会说,我用Python。首先,如果你的项目能用Java/Python乃至Ruby做,那么用C++是自讨苦吃。

因为能用那些语言代表你的项目在效率上本身要求就不高,那么用一门效率上讨不到太大好处,复杂性上却绰绰有余的语言,有什么价值呢?其次,如果你的项目效率是很重要的,你可能会说可以用D。

然而现实是D在工业界尤其是国内被运用得非常少,几乎没有。而C++语言却有大量的既有代码,已经使用C++去做他们的产品的公司,在很长一段时间之内几乎是不可能用别的语言重写代码的,正如Joel所说,决定重写一个非平凡的代码基==自杀。所以,我们至少要注意以下两个明显的事实。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-29 08:45

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表