• 10756阅读
  • 14回复

对c++语言缺点的说明 [复制链接]

上一主题 下一主题
离线huzhiwen28
 

只看楼主 倒序阅读 楼主  发表于: 2010-11-16
— 本帖被 xtfllbl 执行锁定操作(2010-11-18) —
关键词: C++语言批判
首先,这仅仅是我个人的观点,仅仅是代表我个人的经历和总结。

为了表明我对C++批判不是人云亦云,首先我说下个人的开发经历,02年开始写linux脚本以及web编程,05开始在正式产品中使用C++一直到现在,其中几个项目用了C语言,C++代码行数为近5万行,C代码近2万行,脚本近2万行。

C++设计目标是提供simula的程序组织能力,同时提供C的效率和灵活。既有执行效率,又能象simula一样提供类、类继承。C++是第一个将基于对象以及OO观念推向开发者的主流语言。所以说C++在某种程度上是成功的,在主流开发者中引入了基于对象、OO、泛型的思想。

C++是一门学院派语言,一门理论化很浓的语言,理论驱动不是实际产品驱动出来的。C++实际上是作者和几个人在一起,“造”出来的模拟simula的C语言,很多的语言特点集合在一起,就成了这个样子,C++是一个天天玩弄语言的人做出来的东西,不实际,不好用。C++妄想一门语言可以完成实际问题域的建模(类,OO,模板),殊不知实际世界关系是如此的复杂,区区几个语言特征怎么就可以模拟出来?

C++不代表OO:
基于对象,也即数据抽象,关注点是数据表示和行为绑定在一起,即对象的内部构成是怎样的。面向对象OO,关注点是对象间关系及对象的外部接口。
C++提供的类、继承、虚拟函数等只是语言实现OO的手段,并不说明这些就是OO。
面向对象是一种考虑问题的方法,和具体的语言无关,妄图用语言的面向对象来构建问题域的想法出发点就注定了C++这条路并不好走。说的通俗点是把无限的变化投入到语言有限的语法中,小应用还能忍受并且看起来代码还规范很多,大的应用就会让人抓狂。
况且实际应用的模型,千变万化,并不仅仅是基于对象或者面向对象,有些单纯就是算法。

C++不代表泛型:
泛型,是一种思想,实际上C++中的template基本就是代码宏在编译器阶层上的实现而已,没有新的东西出来,至于函数对象之类,都可以使用函数指针来实现。

C++开发者的思想包袱过重:
C++提供过多的选择,也就是说,使用C++语言解决一个问题,有比较多的语言方案选择,例如继承和泛型都可以实现OO。选择过度,必然过分对比,必然过分疑虑,C++设计者真累。
C++的功能都是通过语言本身来展现的(类,OO,模板),那么要做出一个好的设计(抉择)就必须全部理解上面这些东西才可以,而要理解这些东西,可不是件容易的事情,所以会导致开发者,在做设计的时候,经常反复去查看C++语言资料,这个导致心理包袱过重,担心自己做的不合适。而C++的这些东西学习需要在项目中实践才可以理解,而在项目中实践的话,一开始肯定不是很理解的,所以需要经常性的反复,经常反复后,才真正理解,然后再进一步的理解新的特征,然后在项目中又会使用新的特征,这个过程会让人郁闷、疑惑。我可以肯定说,C++程序员是最郁闷的程序员,根本就没有世界在我手上的感觉。
C++的语言特征,束缚了人的思想,一开始对业务建模,就是分类,然后类继承,这个一点都不符合人的认识规律和实际的业务模型。

C++过多的吸收各类语言特点,至于各个特点是否统一,是否增加用户的思想包袱,这就不管了。
C++语言本身过分设计,将太多的任务放在语言身上了。学习C++导致很多程序员走在一条错误的面向对象的弯路上,而且浪费了很长很长时间。C++语言本身(设计嵌入在语言中)鼓励和引诱人过分设计,过分使用各类细枝末节的语言

C++过于复杂难以学习:
如果语言太复杂,那么无论是教材(教学趋利)或者项目都有使用最新最角落技术的冲动,那么对于使用者和学习者来说,都有很大的心理包袱,因为不是渐进的学习,是一上来就很复杂很陡峭的台阶。如果语言简单,那么就不会对语言的使用产生阻碍。
C++有着过多的教材,一个语言出现那么多的教材,而且很多都是经典,说明想学好这个语言太多困难,需要花费太多的时间。而且很多教材中更多的是炫耀技术和夸大的成分,这点倒和C++语言本身风格一致。在C++很多教材书中,可以看到那些人玩弄语法和triCk,在一个小的圈子中兜来兜去,最后对于实际设计毫无用处。

C++即使学会了也没有用或者不好用:
C++的不好,并不仅仅是其难学、花样多,而是其即使学好也很难用,也就是说,即使你什么OO、模板都学得非常熟练,对于业务建模C++也是很难表示的,因为现实世界并不是简单的OO或者模板啊,对于这,你可能又会说,你干嘛要用C++直接建模业务呢,用C啊,但是,请记住,C++一开始其卖点就是OO,也就是可以使用语言特征直接建模啊,所以说,C++的高级语言特征没有实用价值,一个又难学,学会又没有什么用的语言,请简单放弃之。
数据抽象以及类继承真的能否反应真实的现实业务么,或者也就仅仅反应了很小的一个业务范围,更而引申到OO是否真的能够对现实建模有很大的作用,如果这一切的答案都是否定或者不那么肯定的话,其之上建立的细节语法实现有什么意义呢,难道真的就只够给智力高强的学习者以脑力锻炼用么?然后自鸣得意!如果现实软件建模效果有限,那么一个语言中引入那么大复杂度,耗费学习者那么多的精力,根本就不必要。
类继承不符合项目的开发规律,首先,类型树的建立,是建立在对业务的理解上,项目组对业务的理解是逐步深入的,那么在深入理解后,业务模型也就是说类型树要改变,而一开始的代码是建立在父类上的,那么继承关系变了,类的接口也就变了,那么业务相关设计全部都必须修改了,所以类继承不利于项目的进化,不符合人的认知规律。
模板编程,模板编程在很小的范围(单一容器)是有效的,但是真实世界,模板的作用是有限的,很少可以找到真实世界中符合模板的模型特征。
数据抽象是有效的,但是也就仅仅是形式上的有效而已。
对于学会C++的人,常常夸大某个特性的作用,实际上任何语言或者库的特征的作用都是有限的,对于现实项目而言,选择合适的语言,平凡心态去实现它,精心设计、测试、验证更为重要,就像linus说的意思,学会一门难度如C++的语言,并不是什么值得骄傲的事情的,编程语言仅仅是一门语言,并不神秘,即使语言神秘,如果做不出来好用,好维护的软件,那有何用?在一个大的场景中,个别的的特征和语言以及方法论并没有那么重要,这个也包含OO以及设计模式等。

C++的很多语言特征没有用:
编译时的权限控制没有意义,没有让程序员减少负担,没有控制感
构造函数和析构函数自动调用也不好,必须手动调用才让程序员完全控制,因为对象的生存期是个很重要的东西,不能简化,无需作为语言机制,只需成为项目级别的约定
函数定义不放在类中而是放在别的地方,也不好,应该放在类里面。
引入新的操作符new和delete,这两个关键字移植自simula ,new操作符就是在堆内存中分配对象,然后自动调用构造函数而已,这个完全可以采用malloc 加手动函数调用初始化方式来做,无需引入新关键字。
inline无意义,应该完全开放给设计人员,本质上是简单拷贝代码
操作符的重载只是形式上的意义,= 和 set没有本质的区别,仅仅为了形式就去引入新的语法?而且,为了内部类型和用户类型的定义一致就定义赋值重载,也没有意义,内部类型的操作符,其类型和含义是既定的几种而已,用户的那么多类型,也用同样的操作符,根本毫无意义的,例如picture对象,相加有什么意义;运算符和函数本质上是重合的,不符合正交的特点,运算符是一种方便书写的助记符而已。实际的用户类型其接口多样化,根本不是几个操作符可以描叙的。
函数重载其实也没有意义,只是为了减少名字造词的工作,没有本质的提高,一个严肃软件产品怎么会在乎这个小小的工作呢,而且编译后,不还是不同的函数名字么?
默认函数参数:语义错误的来源之一,作为一个强类型检查语言,默认参数就是一个类型检查墙壁上的口子,而且这个还被滥用。

C++成功的产品:
寥寥无几,即使有也很快要面对维护者的流失和使用者的离去,例如QT,Boost,ACE等等。
对于QT,我个人并不看好他,构建于C++语言之上就是他的最大的问题,然后就是QT是一门包含基础库和应用库的巨大的库,那么大的库,要维护好,可不容易,加入新的功能而不引入问题(兼容性也算)基本也是个不可能完成的任务。ACE呢,实际项目中用过的都知道,速度太慢、太臃肿。Boost这么多年了,还没有推广开。

项目管理方面的总结:
选择一门简约的语言(不那么有野心),使用平凡的心态去学习、使用,精心的设计、编码、测试才是项目的发展的之道。用好一门语言,精心去使用他、体会他,熟悉业务,写出好的软件,比掌握多少语言语法细节都强。

我个人的总结:
开发语言转换到C语言,风格切换到C风格,简单的C才是王道,库及工具才是扩展方向。
C语言没有心智包袱,是很简单的一门语言,语言本身几天就可以学习理解完毕。然后就是设计,根据自己的理解做设计进化,这样,在做设计后,不会担自己做的不是最好,即使不是最好,也是在当前的对业务的理解上能做的最好了,这样就不会有心理包袱,而是可以坦然面对进化。
C语言没有束缚人的思想,其本身没有任何业务建模方式,一切都是依靠用户自己建立,所有的一切都可以通过结构、指针、函数来表达,符合实际的业务模型和人的认识规律。
C语言其实并不是什么过程语言,过程语言这个是强加上于他之面的帽子,汇编是过程式的么?一个语言并不是简单的说他是过程,说他处理问题都是过程式的,他也可以以面向对象的方式来实现软件(如果需要面向对象的话),关键是你如何定义面向对象,当然你认为只有C++的面向对象才是面向对象,那就无语了。

[ 此帖被huzhiwen28在2010-11-16 15:04重新编辑 ]
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线xtfllbl

只看该作者 1楼 发表于: 2010-11-16
支持原创,虽然自己写着C++...
另外标题用批判口气重了,换成见解也许会好点。
上海欢迎您
离线huzhiwen28

只看该作者 2楼 发表于: 2010-11-16
回 1楼(xtfllbl) 的帖子
怎么说呢,我开始爱之愈深,投入太多,所以怨念也大啊
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线xtfllbl

只看该作者 3楼 发表于: 2010-11-16
Re:回 1楼(xtfllbl) 的帖子
引用第2楼huzhiwen28于2010-11-16 15:03发表的 回 1楼(xtfllbl) 的帖子 :
怎么说呢,我开始爱之愈深,投入太多,所以怨念也大啊

哈哈,爱之深,恨之切阿。
上海欢迎您
离线roywillow

只看该作者 4楼 发表于: 2010-11-16
我只是个业余的“写程序的”,从高中开始玩VB,然后大学玩了半个学期Delphi后开始玩C++,并逐渐转为Qt。
个人感觉VB写东西挺方便简单的,就是有时候一些太深层的东西封装的太好,反而不太容易发挥;另外效率似乎不咋地……
Delphi就是一个强数据类型有时候烦人,一点很简单的东西有时会因为数据类型搞得很臃肿……或许是我水平问题?
C++感觉是个很灵活的东西,用久了就会感觉挺上手,加上Qt的类库写一些东西真是有种VB的感觉哈哈……

我没系统的学过编程,并且还只是个学医的(……),所以对楼主的一些看法感觉很模糊,应该是水平层次不够吧~
但是C++就是个工具,人是主体,能把这个工具发挥到什么水平要看人的水平,就像一片柳叶刀你可以拿来削铅笔(相当的好用哦),也可以用来切除肿瘤。
所以,既然用了C++,就别嫌弃,扬长避短就一切OK~
或者多学几种语言然后找找最适合自己的?
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线huzhiwen28

只看该作者 5楼 发表于: 2010-11-16
回 4楼(roywillow) 的帖子
QT用起来的确很方便,只是其移植性还不足够的好,如果只是简单的写写小程序,QT足矣!如果考虑到跨平台的话,版本兼容是个大问题。C++语言是个工具,只是这个工具经常会引导“人”去做错误的事情,或者引诱“人”进入泥沼中,这个是语言本身的特性;
如果可以扬长避短当然可以,例如很多的项目对于C++的语言特性的使用都有限制,例如不可以使用RTTI和异常,不可以使用运算符重载之类
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线XChinux

只看该作者 6楼 发表于: 2010-11-16
C++作为一个通用编程语言,特性、特点都在那里放着,用不好,不能怪语言特性、功能太多太强大,只能怪使用者没有能正确使用,就好像一把锋利的刀,不小心拿着割了手了,就说这个刀不好,能割手?我用C++(工作用,我要靠它吃饭)十年了,在使用它的项目上,还是喜欢用它,因为它给我足够的自由与灵活,足够施展以实现自己想要的东西。没必要去批判这个批判那个,事务皆有两面性,有得必有失。

不知道还好,一统计吓一跳,刚才写了个程序,统计我现在工作目录下的C++程序的代码行数,共1444个文件21 2633行,平均每个文件147行,当然这只是现在处于活跃状态(两年内正在开发或正在维护的,超过两年的,备份出去了,不在工作目录下,当然,这些代码,都是在四年内开发的,已除去了有其他人参与的项目或目录)项目中C++的代码行数(不包括使用代码工具生成的,比如ui_xxxx.h、moc_xxxx.xxx, qrc_xxxx等文件),版本不断提升,代码不断修改,这些工作是无法统计入来的。


选择适合你用的工具,将工作做好即可。
[ 此帖被XChinux在2010-11-16 20:35重新编辑 ]
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线cahwxy

只看该作者 7楼 发表于: 2010-11-17
用不好C++, 人的问题成分很大的
离线huzhiwen28

只看该作者 8楼 发表于: 2010-11-17
回 6楼(XChinux) 的帖子
首先我说明,我对C++还是比较熟悉的,各类特性的使用都有经验;我之所以批判C++是因为其本质就是不好,并不是因为它曾经割到我的手。我相信工作经验如你,也还是经常被C++割到手。要说灵活与自由,C语言更为灵活与自由,C++反而在开发者的头上套上了类、继承、模板的枷锁,这些都束缚了开发者的思维。
对于普通应用,我相信带垃圾回收、库功能比较多的语言更为实用,例如java或者c#之类,对于对时间响应要求比较高的,需要和内核打交道的应用,C语言更为合适。
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线XChinux

只看该作者 9楼 发表于: 2010-11-17
1、当今许多前沿的语言、编程思想等大多都是在C++中发展而来的,其他的主流语言,
   比如JAVA、C#基本是暗在亦步亦趋的跟着C++或其他动态语言的发展在走
2、C++支持面向工程、面向对象、泛型等编程方法,但并没有强制开发者如何如何去用,
   支持面向对象开发,但不是为了对象而对象,这一点,我比较讨厌诸如Java之类的一些语言,过了。
   编程语言是一个工具,是用来解决现实问题的,而不是为语言而语言。
3、可以说,只要是一些高级编程语言能实现的功能,没有C语言实现不了的,但算起代价来就不划算了,
   所以各种语言都有当前适合自己的市场与定位,非要拿着C或C++去写一个网页程序,并不是不能,而是不划算。
   现实世界中,系统越庞大,越是由多种语言或工具、系统进行整合来开发的,可能前端是用PHP、后端是用JAVA,
   涉及性能的可能又是C等等,即使开发者有这个能力一种语言包打天下,客户也不会答应。
4、编程语言,最好中立化,不受任何厂商实际控制,否则可能有短期效益,但长远来看,并不是好事。所以C++尽管
   现在最缺乏的是库,并且由于有C++标准委员会的控制,而不受任何独立厂商的控制,导致其发展缓慢,但这也是
   优点,我十分羡慕那些C语言的开发者,从七十年代开始,一直到现在,近40年了,还是相当不错,不像许多商业
   编程语言,由厂商驱动,十年后、二十年后,可能就烟消云散了,或者是更新太快,使开发者疲于奔命。最明显的
   是Windows下的GUI开发,开发者跟着跑太累,不停的更新,不停的变。为了自己能过得舒服点,选个不要太多商业味
   的吧。
5、C++作为一门通用语言,作为当今世界计算机软件开发的基石之一,像C语言一样,积累了大量的基础库,只要这些
   基础库存在,别的新兴语言就很难去再造轮子。君不见许多Fortran语言编写的数学方面的库,直到现在仍然是许多
   软件的基石。所以C、C++这类语言,会是永远的基石,除非计算机体系结构发生根本改变。许多新编程语言诞生出来,
   其比较对象,肯定少不了C、C++。从某种意义上讲,C、C++已经成为一种参考、一种坐标、一个高度,具有不可替代性。
   学会JAVA的人再来学C++,觉得比较吃力,但学会C++的人学习JAVA,会觉得很轻松,从多角度来看,这说明了什么问题?
6、语言是工具,工具是人用的,linus的关于C++的话,十分有误导作用,因为那些话有特定的范围。在一个正规化的项目,
   软件工程、管理做好了,会允许普通项目开发成员随意自己的喜欢来做开发吗?不可能的,为了保证项目质量和进度,
   详细设计时就会限定普通项目开发成员该用什么,不该用什么的,该怎么用的。要工程化、流水线化就要泯灭个性。
   而软件开发的创造性的东西,高级设计方面的东西,应由一个能够驾驭该门语言的人来处理吧,否则继续练功吧。
7、与楼主相反,我认为C++的许多语言特性用起来十分方便,这是我在使用JAVA的时候,没有操作符重载而暗暗咒骂的
   原因之一。inline本质上是简单的拷贝代码,但一样的东西拷贝多了是不是很烦呢?如果要修改某一处是不是都得改?
   做成宏定义吧,无法进行编译时类型检查,做成函数吧,又有了函数调用开销。inline为觉得很好,C++给我们提供了
   优化性能的方法。当然了,用与不用,全在个人,看着碍眼不用就是了。默认函数参数,哈哈,在C++中一个函数就搞定
   的事情,到了JAVA里,我得写两个、三个、甚至四个,烦不烦呀。
8、C++成功的产品,这个不能说是寥寥无几,而是就在我们身边,你没有意识到吗?Firefox是什么开发的?Photoshop是什么开发的?
   Office是什么开发的?不要指望Java或C#,相信绝大多数人会把它直接扔了。

9、最后,使用合适的工具做合适的事情,为语言而语言那就真的学院派、精神胜利了。选择权在个人,如果个人无权选择,那就
   忍受吧,以二分法看世界,没有完美的东西。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线huzhiwen28

只看该作者 10楼 发表于: 2010-11-17
回 9楼(XChinux) 的帖子
1 C++影响力继续存在,这我承认,但是这个只是开发社区新手由来已久的特性,喜欢复杂的、花哨的东西
2 我和你想的相反,风格严格约定的语言,对于实际工程只有好处,没有坏处,可以大大减少交流成本和设计抉择
3 我也是这样认为的,任何语言和库的特征在工程中起到的作用都是有限的
4 语言中立的问题,我还真没有考虑过,因为我以前一直都用的是C C++ PHP PERL之类
5 C++基础库太少,很多开发最后还是回到自己造轮子,或者调用系统的API
6 我批判C++也就是给开发者以及管理者提提醒,让他们知道C++并不是被全部人看好,让他们抉择的时候会更为谨慎;我觉得如linus大牛如此的人,看问题基本就是看本质,并不是仅仅特定范围的(我并不迷信权威,我所有的认知基本就是我体验过总结出来的)
7 C++的语言特征,自己觉得好可以用。只要你或者你的团队可以接受其引入的复杂度
8 这些产品我相信(因为我没有看这些源代码),最终代码中留下来的都会是C风格的代码,而不是使用C++复杂特征的那些代码,所以最终的胜利还是简约的风格的胜利,而不是C++的卖弄技巧风格的胜利
9 我也是这么认为的

我在QT社区中说C++的坏话,本意是给学习者提醒,谨慎学习C++,不要沉迷于C++的角落技术,关注设计,而不是语言
http://blog.sina.com.cn/tonyhuzhiwen
https://github.com/huzhiwen28/
专注于工业嵌入设备开发
离线XChinux

只看该作者 11楼 发表于: 2010-11-17
我对语言优劣的态度,一般是不讨论,不发表观点。

关于linus的那句话,因为在他所讨论的那个git项目中,是开源式的开发,并不是正规集中管理形式的,而且以这种开发管理方法来做,各人的自由度相当的大,所以这导致了linus无法完全的控制代码的质量。为什么这么说呢,因为在实践中我对我领导的项目(大部分为C++、PHP)对于使用的框架、技术、第三方库以及编程风格等是严格控制的,因为我要做到,项目中所有的技术、编程方法等都要由项目总技术负责人来确定,普通开发人员是无权决定的。并且普通开发人员的代码,每完成一个小任务(一般是一到三日左右),都要交由对应负责人进行代码审查,以保证所有人写出的代码风格统一,思想统一,换另外一个人照样能完成任务,项目组中缺少任何一个普通开发人员都不会影响进度,别人看着详细设计就能接手,就能维护。   所以我说,对于此类开发,关键在于软件开发过程管理。而中国的情况比较差,上百万的项目,找个普通中级开发者都敢干,老板不懂开发,下面的人忽悠,误人误己,培养出一大批不合格技术型的所谓项目经理。   对于研发性质的东西,各司其职,技术研究、系统架构这类工作,必须由足够胜任(尤其是基本功要扎实)的人去处理。

C++的诸多特性,确实容易误导初学者,在这个浮躁的年代,做什么事情一定要把基础打扎实,这样以后的道路才会好走。一个号称有经验的开发者,如果连最基本的堆、栈都分不清,连冒泡排序(二分排序)、链表(树)都自己写不出来,首先回去好好学习吧。那些培训机构忽悠人,但实际的工作,不能忽悠的。


不管用不用C++做开发,我还是建议一个职业软件开发者,都应该学习C和C++,因为通过学习C、C++,更易于理解编程语言的本质,对开发者更深入的理解自己所用的开发语言绝对益处多多。做PHP开发的,要想更上一层楼,必须学会自己用C、C++来自己写扩展,或者擅长与其他语言或工具搭建的系统进行集成配合,否则这个架构瓶颈永远无法突破。对其他语言也是一样,跳出语言之外,在更高层的角度来看我们所用的工具,所建的系统。


C++设计时兼容了C,这有一个十分大的好处,C的基础库C++可以直接使用。为什么有的人会觉得C、C++基础库少呢?因为这些库并不在C、C++的标准库中,而没有进行深入研究的人一般是不知道这些库的存在或不知道到哪里去找,所以造成许多人重复造轮子,C、C++标准库内容的不足,这是其一大弱点,不像JAVA、C#,自己就带一大堆库,一般的开发根本不需要去找什么第三方库,系统库就足够完成任务了。在深入了解了C/C++的第三方代码库可用时,势必事半功倍,但事已至此,时间已流逝,无法返回。想进入C++标准库,足够的难,流失了一大批开发早的同时,也保持了标准库的相对稳定,这是其反作用。  做桌面应用,当初选择了Qt而非.NET,就因为当时它的更新实在是太快了,并且不兼容,直到现在我在给客户开发C#接口时,竟然要同时出支持VC#2003、2005、2008三个版本的,太累了。  


不建议在技术社区中挑起语言之争、XXX PK YYY等的讨论,这类讨论基本上没什么意义,周而复始的不停争论,更会误导初学者。因为参与讨论的人员,绝大多数都是初、中级人员,高级人员都很少参加这类讨论,或无时间,或觉得讨论来讨论去无意义。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线roywillow

只看该作者 12楼 发表于: 2010-11-17
似乎讨论的越来越大的……

我的c和c++基础就很渣……或者说算法方面的基础就不行,毕竟不是这专业的……
不过因为不太可能用到所以就没怎么学(或者说没学所以就不知道会用到?)

总的来说目前最喜欢的是c++,最近上了门java的课,算是有个机会比较比较了。
对于缺点提的太多反而会影响初学者的信心和决心
当时学delphi的时候就因为一些讨论的东西让我犹豫了半天要不要学……
缺点什么的提一下知道就好,别说的太多
要不人家C++多伤心啊XD
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线steinlee

只看该作者 13楼 发表于: 2010-11-18
C++ 是有史以来开发的最难的编程语言。它主要应用于大型程序的开发。这位作者可能没有大型程序开发的经验。我说的大型程序指上百万和千万语句的程序。C语言开发的大型程序很难维护,任何改进可能影响很多地方。大家别忘了程序维护的费用高昂。C++开发的程序容易维护。C++也兼容C. C++的一个缺点是memory leak,但是这个问题可以很容易用已有的工具像valgrind解决。对于一个有经验的开发者这不是大问题。Java和C#没有memory leak问题,但是是以速度做代价的.  Generally speaking, C++ is the best language available for large-scale software. You will notice that many packages are made in C++. 我用过fortran, C, java, C++. 大型程序设计最好是用C++。C++程序会比C慢一些.既然C++兼容C,在一些速度要求高的地方可以用C.

选择编程语言很重要,选不好会付出很大代价。很多公司选择多种语言弄个大杂烩程序,他们没有考虑支持和维护费用. 我不是建议大家什么地方都用C++。但是如果程序庞大时,C++往往是最好的选择。C++难学点,但用多了就熟悉了。很多人在C++程序里留有C风格,那是他们不懂C++. C和C++的设计思想是不一样的. 学会了C++,别的语言就很容易学。我用久了C++, 给我任何一种别的语言我会在很短时间就能用。

[ 此帖被steinlee在2010-11-18 02:47重新编辑 ]
Looking for remote C/C++ and Qt 兼职
离线xtfllbl

只看该作者 14楼 发表于: 2010-11-18
好了,就此打住。
上海欢迎您