c++的优势究竟在何处?(csdn-Vitin回答)

Posted on 2008-04-08 19:36 Codeboy 阅读(1195) 评论(0)  编辑 收藏 引用 所属分类: 世说新语
  我觉得C++最大的优势在于她的通用和全面。我们往往听到C++和其他语言的比较:诸如运行效率不如C啦、应用软件的开发效率上不如Java和.NET啦、GUI开发不如VB啦……以及在各个方面与各种专用语言和脚本语言的比较。似乎C++就没有自己最突出的地方,简直一无是处。我想说的是,先不谈比较的结果,这些比较能够成立,本身就说明了C++的优势——她是通用的,她是全面的。在成熟的主流语言中,除了C++,还有谁能够做到这一点?!  

  另外一些比较则罕有提及:与C语言比开发应用软件?与Java比做底层?与VB比运行效率?是的,很罕见。因为结论显而易见以至任何的比较都是浪费时间。当然了,她们都有各自的适用范围,做好本职就好了,何必与你比其他的。这是一种生存之道,无可厚非。唯有C++,选择了另一条道路——“通用语言”,不是象C那样“通用的”底层语言,也不是象Java那样其实只能在一个平台上运行的“跨平台”语言,而是真正的通用:通用于所有层次、通用于所有平台、通用于所有领域,对所有的应用都不偏不倚、一视同仁。  

  要做到这一点是很困难的,C++往往被人指责野心过大。还有各种各样的误解:有指责VC只能在Windows上使用的(所以C++是不能跨平台的);有指责gcc无法快速开发GUI的(所以C++的应用是有局限的);有指责Java、.NET和脚本语言占据了绝大部分网站开发的(所以C++是不能适应网络时代的)……这些指责说得人多了,就成为了真理。我不想去一一解疑,只想说明一点:语言之间的比较很少是公正的,因为误解是广泛存在的。  

  无疑,C++的野心确实很大,“通用”二字貌似华丽有余,实惠不足。常常有人说:学习C++,然后使用其他专门语言。是的,在一个特定领域里,通用往往比不上专用的。但是,整体总是大于部分之和。如果说,“博”和“精”各有所长的话,那么又博且精不是更好吗?就象我们常常用电脑,而不是分立的上网机、办公机、游戏机、编程机   ……虽然C++不能包揽所有的冠军,但是如果她在哪方面都不算太差的话,又何必执着于虚幻的完美呢?  

  确实,C++能够立足于世,不仅在于她是“通用”的,更在于她是“全面”的。你常常能在某个局部找到她的一点不足。是的,她有一个不足;那么,能否改进呢?回答是:不能!为什么?回答是:如果改进了这一点,就会出现新的不足,可能是另一点,甚或更多。就象一个已经挤满了人的车厢,要上去一个,就得再下来一个!是的,C++就是这样的车厢,她无法让你享受悠闲的空间,反而给你窒息的感觉;但是,正是这样的车厢,支撑着主干交通的正常运行(想想吧,如果一个人口密集的大城市里全部都是私家车,会是什么状况)。车厢可能会越做越大,因为技术正在不断提高,但是C++这个车厢,永远都是满的。一个局部的不足,如果不存在被改进的可能,恰恰暗示了已经达到了全局最佳!C++正是以此为目标的;并且,她做到了!  

  回到我们最初的比较上。  
  C++的运行效率不如C吗?是的,也许吧,以特定的标准。但是,不如在哪些方面呢?虚函数、虚基类、异常处理……这些都是C所不具备的。如果在C++中不使用它们,那么效率就不会比C低(优秀的编译器确实可以做到这一点)!C++考虑问题永远是综合的,而非单方面的,她的效率,趋近于你在享用各种特性时所能达到的最佳值,你只付出必然的代价。  
  C++在应用软件的开发效率上不如Java和.NET吗?是的,也许吧,以特定的标准。但是,原因是什么呢?是C++语言不及Java和.NET吗?不是的。只是因为后两者是产品,而C++是语言。这个比较,本身就是不合适的。在.NET中,你同样可以使用C++,同样可以达到它的开发效率。另外,C++并不限制其实现产品,所以每个特定应用领域都可以有其特定的编译器,它们帮助程序员达到各自最佳的开发效率。如果单论语言,那么只有C++的语言复杂度会影响这一话题。也许Java等更容易上手,但是对两方面的资深人员来说,C++的开发效率毫不逊色。值得一提的是,在比较时应该同时考虑应用的复杂度。另外,需要知道,作为产品的Java和.NET预处理了一些应用复杂度,而这些产品本身很大程度上(如果不说全部的话)是用C++开发的。  
  C++在GUI开发方面不如VB吗?是的,也许吧,以特定的标准。但是,为什么呢?作为语言,C++没有制订标准的GUI库,因为GUI太复杂,要达到通用的最佳,很难。因此,C++放弃了这方面的通用化。但是,每个具体的实现可以使用各自优化的GUI库。VC比VB如何?如果嫌它还不算快速开发,BCB呢?另外,还有QT等通用GUI库。在语言方面,C++追求通用和全面,而局部的优化,交给具体的实现来完成,这是C++成功的秘诀。  

  综上所述,我认为C++的优势就在于她的通用和全面(也有人认为这正是她的劣势,也许吧,从另一个角度)。她的通用,来源于其始终不变的远大理想(也可称之为“野心”);而她的全面,则得益于她的设计者们力争上游、精益求精的工作态度!就象我曾经说过的,C++真正的优势在于C++社群——那些设计她的人,实现她的人,以及使用她的人。那些表面的优势来源于此,也归结于此。C++的开局很不错,现在仍很好;而她的未来,将由我们来决定……