发新话题
打印

重识C++的魅力

引用:
原帖由 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++可能会消失。
恨号,恨呛大!!!

TOP

我不用这些,因为只能欣赏,不容易维护,不实用。

TOP

引用:
原帖由 yongweisun 于 2008-1-9 13:37 发表

天哪,你是诗人,不是程序员,如果我是少女,一定被你骗了。。。。
集合类在java和c#这样的语言里面是一个基本的东西,任何程序员都可以轻易的写出来。这个居然是boost的伟大特性,真是。。。。
根据我在工作 ...
深深的同感啊
强烈支持
本来想注册个"新手上路", 结果被人注了, 郁闷, 只好注册成"论坛长老"...
各位见谅!

TOP

据说 - 星际争霸2是c写出来的

TOP

引用:
原帖由 Pluto 于 2008-1-9 21:57 发表
据说 - 星际争霸2是c写出来的
C好,如果C++是完美的,就没有汇编了.
Search author named w1984721 ,You will be surprised.

TOP

引用:
原帖由 yongweisun 于 2008-1-9 13:37 发表

天哪,你是诗人,不是程序员,如果我是少女,一定被你骗了。。。。
集合类在java和c#这样的语言里面是一个基本的东西,任何程序员都可以轻易的写出来。这个居然是boost的伟大特性,真是。。。。
根据我在工作 ...
.........虽然你很牛,但是我想说的是,任何语言都有它的生命周期,某人吃饼,吃了10个才饱,他是否会想,"早知道吃了第10个就会饱,前9个就不需要吃了."
另外,我觉得优点是看要求和相对而言的.
Search author named w1984721 ,You will be surprised.

TOP

引用:
原帖由 黑虎 于 2008-1-9 12:41 发表
我喜欢用直观,简单的语法
像 v += 1,2,3,4,5,6,7,8,9; 这种我是绝对不会用的
这个写法是不好,但是我看到著名的ZLIB的代码就这么写,其实这个是标准的C/C++语法.就算世界上没有BOOST这句话也不会出错.不知道BOOST的有什么不同,是否重载了逗号表达式?另外这里有个优先级的问题.......有的编译器可能不标准.
Search author named w1984721 ,You will be surprised.

TOP

语言其实是一种描述事物,与他人交流的工具,现在很多库,和多资源都是用C++,C,JAVA开发的,尤其是免费的资源.选择了这些工具就同时选择了这些资源.

TOP

论C++代码质量和优雅性 STL 绝对比 Boost 强
你的分享,世界的共享

TOP

这是艺术!不是你们这帮搞技术的能明白的,艺术要很酷,很牛,很少人能看懂,能引发激情

不要看编程艺术之类的书,那都是骗人的,楼主这才是真的艺术。

TOP

发新话题