引用:
原帖由 stormelf 于 2008-1-9 02:54 发表 
用c++好多年了,自己感觉对它已经比较了解,但今天又一次学习boost时(为什么说又一次? 因为每次都不彻底,最后均放弃了), 不禁为它的魅力所倾倒,感叹自己对c++的了解的片面。下面列举几个使用boost库的例子,相信如 ...
天哪,你是诗人,不是程序员,如果我是少女,一定被你骗了。。。。

集合类在java和c#这样的语言里面是一个基本的东西,任何程序员都可以轻易的写出来。这个居然是boost的伟大特性,真是。。。。
根据我在工作过公司的观察,很多c++程序员不会使用集合类。会使用集合类,就算是高手了。。。。

(当然,我指的是c++程序员,如果会几种编程语言,就不是"c++程序员"了)
而集合类,是表达类之间的一对多关系的基础。不会使用集合类,当然就没有系统设计能力。
c++有几大弱点,是它将来必然被淘汰的原因。
第一,兼容性差,复杂度高。这使他不可能成为开发操作系统和硬件平台的首选语言。而c,因为比较简单,所以在这方面,比c++要更受宠。
第二,没有一个内置的内存管理框架。这使他不可能成为开发应用的高效率语言。应用软件,需要的是方便,实用。
boost的内存管理不好使。因为它无法解决循环引用的问题。这个问题不好解决,无数的人想解决这个问题。但是想解决这个问题,必须保存对象之间相互引用的对象图。显然,这必须对c++语言进行彻底的改造。boost在这种情况下,需要指明weakreference。也就是说,需要手工干预,这就走回了手工管理内存的老路。因为在引用关系复杂的时候,难以预料什么时候会发生循环引用。所以,这种内存框架不安全。
其他的:没有内置的异常类型,没有内置的字符串类型(据说某些人要求在c++制定下一个新标准的时候必须加入统一的字符串类型,否则以死相拼)
字符串以'\0'结尾,而不是像delphi那样在字符串前面指明字符串长度。这是缓冲区溢出的根源。如果操作系统用delphi来开发,现在操作系统的安全漏洞要少一半。这是一种历史性的教训,但是现在已经无法挽回了。
编译速度极慢。这是拜头文件所赐。
头文件实际上是从汇编语言的宏慢慢发展过来的,实际上是一个落后于时代的产物。宏这种东西,无助于提高代码的可读性,因此被现代编程语言所抛弃。
template也是一种相当有害的语法。template中出错,通常没有能力给出有效的错误提示信息。不但在c++中如此,c#的泛型也是相当有害,泛型内部抛出异常时,通常很难查错。因为错误信息没有针对性。所以,泛型最好只是应用于集合类。
template并没有那种所谓的"封装算法","将算法与实现独立"的功能,那些纯粹是某些无聊文人吹出来骗取稿费的,跟明星露点、爆乳是一个意思,无非是哗众取宠。
编程其实没有多少奥秘,编程无非是要干活,干活自然需要一把快刀。而不是需要一把可以“打磨一下,也可以打磨成快刀"的铁块。
c#是最快的刀,这是毫无疑问的。

举个例子吧,现在要做一个服务器程序,需要异步调用。c#只要使用一个xxx.BeginInvoke就可以了。。
而c++,java等语言就惨了,需要自己搞线程池,搞对象池,搞调用队列这些重量级的东西。既然这些东西经常用到,就该把它集成到语言本身。不要说其他语言也能实现,我试过,想达到一样的效果,很复杂,不是一两个月能搞好的。
打个比方,这些做编译器的,就是在提供一种服务,我们程序员需要最体贴,最周到的服务,而不是需要编译器产商告诉我们什么是最好的。省时间就是最好。
c#唯一的缺点,就是会使人变懒。因为用过了c#之后,无论再用哪种编程语言,都会觉得很麻烦。有时候,真的希望世界上就剩c#这一种编程语言。。。。
编程的历史,就这么几十年。实际上大家都犯过错误,只不过由于历史的原因,某些不是那么好的工具,也必须继续用下去。而不是说那些工具,就是最好的选择。
c是一种必须要掌握的语言,c++某种程度上也是。因为现在有太多的东西都是用c和c++做得。然而,如果保留我们的记忆,让历史重新发展一次,我相信c依然会存在,但是字符串不会再以'\0'结尾。而c++可能会消失。